443 votes

Comment faire pour exécuter des méthodes d'essais spécifiques de l'ordre dans JUnit4?

Je veux exécuter des méthodes d'essai qui sont annotés par @Test , dans un ordre précis.

Par exemple:

public class MyTest{
    @Test public void test1(){}
    @Test public void test2(){}
}

Je veux m'assurer d'exécuter test1() avant test2() chaque fois que je lance MyTest, mais je ne pouvais pas trouver d'annotation comme @Test(order=xx).

Je pense que c'est assez important pour JUnit, si l'auteur de JUnit ne veut pas de l' ordre de fonctionnalité, pourquoi?

Merci!

512voto

Özhan Düz Points 2879

Junit 4.11 est livré avec @FixMethodOrder d'annotation. Au lieu d'utiliser des solutions personnalisées juste de mettre à niveau votre junit version et annoter la classe de test avec FixMethodOrder(MethodSorters.NAME_ASCENDING). Vérifiez les notes de version pour plus de détails.

Voici un exemple:

import org.junit.runners.MethodSorters;

import org.junit.FixMethodOrder;
import org.junit.Test;

@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class SampleTest {

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

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

248voto

Pascal Thivent Points 295221

Je pense que c'est assez important pour JUnit, si l'auteur de JUnit ne veut pas de l'ordre de la fonctionnalité, pourquoi?

Je ne suis pas sûr de cela, il ya un moyen propre de faire cela avec JUnit, à ma connaissance, JUnit suppose que tous les tests peuvent être effectués dans un ordre arbitraire. À partir de la FAQ:

Comment puis-je utiliser un banc d'essai?

(...) La commande de test-les invocations de méthode n'est pas garanti, donc testOneItemCollection() peut être exécutée avant l'testEmptyCollection(). (...)

Pourquoi est-il si? Eh bien, je crois que de faire des tests afin dépendante est une pratique que les auteurs ne veulent pas promouvoir. Les Tests doivent être indépendants, ils ne devraient pas être couplé et de violation de cette volonté de rendre les choses plus difficiles à maintenir, interrompt la possibilité d'exécuter des tests individuellement (évidemment), etc.

Cela étant dit, si vous voulez vraiment aller dans cette direction, pensez à utiliser TestNG, car il prend en charge l'exécution des tests méthodes dans un ordre arbitraire en mode natif (et des choses comme spécifiant que les méthodes dépend des groupes de méthodes). Cédric Beust explique comment faire cela dans l' ordre de l'exécution des tests dans testng.

115voto

AniketKulkarni Points 1

utiliser de la façon suivante il travaillera avec junit 4.

@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class SampleTest {

    @Test
    public void testAcreate() {
        System.out.println("first");
    }
    @Test
    public void testBupdate() {
        System.out.println("second");
    }
    @Test
    public void testCdelete() {
        System.out.println("third");
    }
}

53voto

Xiè Jìléi Points 3258

Si l'ordre est important, vous devez faire vous-même.

@Test public void test1() { ... }
@Test public void test2() { test1(); ... }

En particulier, vous devez une liste de certains ou de tous les possibles, afin de permutations de test, si nécessaire.

Par exemple,

void test1(); 
void test2(); 
void test3(); 


@Test
public void testOrder1() { test1(); test3(); }

@Test(expected = Exception.class)
public void testOrder2() { test2(); test3(); test1(); }

@Test(expected = NullPointerException.class)
public void testOrder3() { test3(); test1(); test2(); }

Ou, un test complet de toutes les permutations:

@Test
public void testAllOrders() {
    for (Object[] sample: permute(1, 2, 3)) {
        for (Object index: sample) {
            switch (((Integer) index).intValue()) {
                case 1: test1(); break; 
                case 2: test2(); break; 
                case 3: test3(); break; 
            }
        }
    }
}

Ici, permute() est une fonction simple qui parcourt tous les possibles permuations dans une Collection de tableau.

8voto

Jesse Glick Points 3877

L' (encore inédit) modifier https://github.com/junit-team/junit/pull/386 introduit un @SortMethodsWith. https://github.com/junit-team/junit/pull/293 au moins fait l'ordre prévisible sans que (dans Java 7, il peut être assez aléatoire).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X