Les annotations de cycle de vie sont fondamentales pour orchestrer l'exécution des tests uniatires. Voici le rôle de chaque annotation principale dans JUnit 4 :
@BeforeClass: S'exécute une seule fois avant tous les tests de la classe. La méthode doit êtrepublic static void. Idéale pour l'initialisation de ressoucres coûteuses (connexions base de données).@AfterClass: S'exécute une seule fois après tous les tests. Méthodepublic static void. Utilisée pour libérer les ressources globales.@Before: S'exécute avant chaque méthode de test. Méthodepublic void. Permet de préparer l'environnement pour chaque test individuel.@After: S'exécute après chaque méthode de test. Méthodepublic void. Sert au nettoyage post-test.@Test: Marque une méthodepublic voidcomme un cas de test exécutable.
Démonstration du cycle de vie
Voici une implémentation illustrant l'ordre d'exécution de ces annotations dans un environnement Spring Boot :
package com.example.demo.testing;
import org.junit.*;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserLifecycleTest {
@BeforeClass
public static void initializeGlobalResources() {
System.out.println("[GLOBAL] Initialisation des ressources partagées");
}
@AfterClass
public static void releaseGlobalResources() {
System.out.println("[GLOBAL] Libération des ressources partagées");
}
@Before
public void setUpTestEnvironment() {
System.out.println("[LOCAL] Préparation du contexte de test");
}
@After
public void tearDownTestEnvironment() {
System.out.println("[LOCAL] Nettoyage du contexte de test");
}
@Test
public void verifyUserCreation() {
System.out.println("[TEST] Vérification de la création d'utilisateur");
Assert.assertTrue(true);
}
@Test
public void verifyUserDeletion() {
System.out.println("[TEST] Vérification de la suppression d'utilisateur");
Assert.assertNotNull(new Object());
}
}
Sortie console attendue :
[GLOBAL] Initialisation des ressources partagées
[LOCAL] Préparation du contexte de test
[TEST] Vérification de la création d'utilisateur
[LOCAL] Nettoyage du contexte de test
[LOCAL] Préparation du contexte de test
[TEST] Vérification de la suppression d'utilisateur
[LOCAL] Nettoyage du contexte de test
[GLOBAL] Libération des ressources partagées
Configuration de l'exécuteur et du contexte Spring
L'annotation @RunWith détermine le lanceur de tests (runner) utilisé par JUnit pour exécuter la classe :
@RunWith(JUnit4.class): Utilise le lanceur standard de JUnit 4.@RunWith(SpringRunner.class)(ouSpringJUnit4ClassRunner.class) : Intègre le cotnexte d'application Spring, permettant l'injection de dépendances et le chargement du contexte dans les tests.@RunWith(Suite.class): Exécute une suite de tests regroupant plusieurs classes de test.
Pour charger des configurations Spring spécifiques lors des tests, on utilise @ContextConfiguration :
- Fichier unique XML :
@ContextConfiguration(locations = "classpath:app-context.xml") - Classe de configuration Java :
@ContextConfiguration(classes = AppConfig.class) - Fichiers multiples :
@ContextConfiguration(locations = {"classpath:context-a.xml", "classpath:context-b.xml"})