Oui, il est possible de manière fiable exécuter le montage et le démontage des méthodes d'avant et d'après tous les tests dans une suite de tests. Permettez-moi de démontrer dans le code:
package com.test;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
@RunWith(Suite.class)
@SuiteClasses({Test1.class, Test2.class})
public class TestSuite {
@BeforeClass
public static void setUp() {
System.out.println("setting up");
}
@AfterClass
public static void tearDown() {
System.out.println("tearing down");
}
}
Si votre classe Test1 ressemblerait à quelque chose comme:
package com.test;
import org.junit.Test;
public class Test1 {
@Test
public void test1() {
System.out.println("test1");
}
}
...et vous pouvez imaginer que Test2 ressemble. Si vous avez exécuté TestSuite, vous obtenez:
setting up
test1
test2
tearing down
Donc vous pouvez voir que la mise en place/démonter seulement exécuter avant et après tous les tests, respectivement.
Le hic: cela ne fonctionne que si vous êtes en cours d'exécution de la suite de test, ne pas courir Test1 et Test2 individuels JUnit tests. Vous avez mentionné que vous utilisez maven, et le maven plugin surefire aime exécuter les tests individuellement, et ne fait pas partie d'une suite. Dans ce cas, je recommande la création d'une super-classe, chaque classe de test s'étend. La super-classe contient alors le annotée @BeforeClass et @AfterClass méthodes. Bien que pas aussi propre que la méthode ci-dessus, je pense qu'il va travailler pour vous.
Comme pour le problème de l'échec des tests, vous pouvez configurer maven.test.erreur.ignorez donc que la construction se poursuit sur l'échec des tests. Ce n'est pas recommandé comme une pratique continue, mais il devrait vous permettre de fonctionner jusqu'à ce que l'ensemble de vos tests passent. Pour plus de détails, voir le maven infaillible de la documentation.