J'ai créé une classe avec quelques tests et, au lieu d'utiliser la fonction @Before
J'aimerais avoir une méthode de configuration qui ne s'exécute qu'une fois avant tous les tests. Est-ce possible avec Junit 4.8 ?
Réponses
Trop de publicités?J'ai résolu ce problème de la manière suivante :
Ajoutez à votre Base classe abstraite (j'entends par là une classe abstraite dans laquelle vous initialisez votre pilote en setUpDriver() ) cette partie du code :
private static boolean started = false;
static{
if (!started) {
started = true;
try {
setUpDriver(); //method where you initialize your driver
} catch (MalformedURLException e) {
}
}
}
Et maintenant, si vos classes de test s'étendent de Base classe abstraite -> setUpDriver() sera exécutée avant le premier @Test seulement ONE temps par cycle.
Après avoir expérimenté pendant un certain temps, voici ma solution. J'en avais besoin pour un test de Spring Boot. J'ai essayé d'utiliser @PostConstruct, malheureusement il est exécuté pour chaque test.
public class TestClass {
private static TestClass testClass = null;
@Before
public void setUp() {
if (testClass == null) {
// set up once
...
testClass = this;
}
}
@AfterClass
public static void cleanUpAfterAll() {
testClass.cleanUpAfterAllTests();
}
private void cleanUpAfterAllTests() {
// final cleanup after all tests
...
}
@Test
public void test1() {
// test 1
...
}
@Test
public void test2() {
// test 2
...
}
}
Voici une suggestion alternative :
Ce que je fais pour que ça marche est Créer une méthode nommée _warmup ou simplement _. Annoter la classe de test avec @FixMethodOrder(MethodSorters.NAME_ASCENDING)
Ceci n'est applicable que si vous exécutez tous les tests de la classe
L'inconvénient est que des tests supplémentaires sont inclus, ce qui entraîne l'exécution d'un @Before et d'un @After supplémentaire. Il est généralement conseillé que vos méthodes de test soient indépendantes de l'ordre, ceci brise cette règle, mais pourquoi quelqu'un voudrait que les tests soient ordonnés de manière aléatoire dans les rapports, je n'en ai aucune idée, donc NAME_ASCENDING est ce que j'utilise toujours.
Mais les avantages de cette méthode sont une configuration simple avec un minimum de code et sans avoir besoin d'étendre les classes/exécutants etc... La durée des tests est plus précise puisque le temps de configuration est reporté dans la méthode _warmup.
- Réponses précédentes
- Plus de réponses