web-dev-qa-db-fra.com

comment faire des méthodes d'exécution de test junit afin

les mecs! J'ai une nouvelle question pour vous. J'ajoute des données au cache à l'aide de différents gestionnaires de cache et je suis confronté au problème avec cela. Je le fais en utilisant junit et spring. Lorsque je lance le test, les méthodes de test sont exécutées de manière aléatoire, mais j'ai besoin qu'elles soient exécutées dans l'ordre. Comment faire?? Voici du code et une sortie de console de vérification:

Classe de service:

@Service("HelloCache")
public class CacheServiceImpl implements CacheInterface {
    @Autowired
    @Qualifier("memcachedClient")
    private MemcachedClient mBean;

    public void Add(String key, Object object) {
        mBean.set(key, 12, object);
    }

    public void Get(String key) {
        mBean.get(key);
    }

    public void Delete(String key) {
        mBean.delete(key);
    }    
}

Voici le test:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "file:src/main/Java/spring.xml")
public class UsingMemcachedTest extends TestCase {
    @Autowired
    @Qualifier("HelloCache")
    private CacheInterface emcached;
    private byte[][] i = new byte[2500][3000];
    private String key = "j";
    @Test
    public void testAddBulkObjects() {
        System.out.println("");
        System.out.println("This is async BULK adding test");
        long time = System.currentTimeMillis();
        for (int k=1; k<=1000; k++) {
            emcached.Add(key+k, i);
        }
        long time2 = System.currentTimeMillis();
        long timeE=time2-time;
        System.out.println("Vremya add BULK objects: " + timeE);
        System.out.println("");
    }

    @Test
    public void testGetBulkObjects() {
        System.out.println("");
        System.out.println("This is getting BULK objects test");
        long time = System.currentTimeMillis(); 
        for (int k=1; k<=1000; k++) {
            emcached.Get(key+k);
        }
        long time2 = System.currentTimeMillis();
        long timeE=time2-time;
        System.out.println("Vremya Get object: " + timeE);
        System.out.println("");
    } 

    @Test
    public void testDeleteBulkObjects() {
        System.out.println("");
        System.out.println("This is deleting BULK objects test");
        long time = System.currentTimeMillis();
        for (int k=1; k<=1000; k++) {
            emcached.Delete(key+k);
        }
        long time2 = System.currentTimeMillis();
        long timeE=time2-time;
        System.out.println("Vremya delete object: " + timeE);
        System.out.println("");
    }

Et la sortie:

This is deleting BULK objects test
Vremya delete object: 137


This is getting BULK objects test
Vremya Get object: 703


This is async BULK adding test
Vremya add BULK objects: 87681

S'il vous plaît, AIDEZ !! =)

12
PAcan

JUnit ne fait aucune promesse concernant l'ordre dans lequel vos tests sont exécutés. L'ordre SERA différent selon l'environnement et le contexte dans lequel les tests sont exécutés.

Pour cette raison (et d'autres), il est considéré comme une très mauvaise conception de test pour que l'ordre affecte le comportement de vos tests. Vous pouvez utiliser @Avant d'aller vous donner une table rase pour travailler, puis faire n'importe quelle configuration pour un test particulier dans le cadre de ce test.

La réponse acceptée à la question suivante donne une bonne explication et des liens vers des ressources utiles: Comment exécuter les méthodes de test dans un ordre spécifique dans JUnit4?

9
Aurand

À partir de la version 4.11, vous pouvez spécifier l'ordre d'exécution à l'aide d'annotations et de classement par nom de méthode:

import org.junit.Test;
import org.junit.FixMethodOrder;
import org.junit.runners.MethodSorters;

@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class MyTest {

    @Test
    public void test1Create() {
        System.out.println("first");
    }

    @Test
    public void test2Update() {
        System.out.println("second");
    }
}

Voir les notes de publication de JUnit 4.11

46
Lorenzo Conserva

JUnit 4.11 a ajouté des trucs sympas qui vous permettent de contrôler Test Execution Order

4
Hiro2k