JUnit - 7.1 @BeforeAll, @AfterAll, @BeforeEach et @AfterEach
Les tests unitaires doivent rester indépendants les uns des autres. Pour y parvenir, JUnit propose des méthodes d'initialisation et de nettoyage. Cette leçon présente quatre annotations qui exécutent du code avant ou après les tests.
Les opérations exécutées une seule fois
@BeforeAll exécute une méthode une seule fois, avant les tests. Elle sert par exemple à ouvrir la connexion à une base de données.
@AfterAll fait l'inverse : elle s'exécute une seule fois après les tests. Elle ferme alors cette connexion, pour éviter les effets de bord entre les différents tests.
Les opérations exécutées autour de chaque test
@BeforeEach s'exécute avant chaque test. La vidéo l'illustre par la création d'un objet User, préparé avant chaque test.
@AfterEach s'exécute après chaque test. Elle nettoie les données utilisées, afin que le test suivant parte d'un état propre.
- @BeforeAll : une fois, avant tous les tests.
- @AfterAll : une fois, après tous les tests.
- @BeforeEach : avant chaque test.
- @AfterEach : après chaque test.
En résumé
@BeforeAll et @AfterAll s'exécutent une seule fois pour la classe de test. @BeforeEach et @AfterEach s'exécutent autour de chaque test. Ce découpage évite qu'un test laisse des données qui perturbent le suivant. Les tests gagnent ainsi en fiabilité.
Points clés
- @BeforeAll s'exécute une fois avant tous les tests.
- @AfterAll s'exécute une fois après tous les tests.
- @BeforeEach prépare les données avant chaque test.
- @AfterEach nettoie les données après chaque test.
- Ces annotations évitent les effets de bord entre les tests.
Questions fréquentes
Quelle différence entre @BeforeAll et @BeforeEach ?
@BeforeAll s'exécute une seule fois au début, alors que @BeforeEach s'exécute avant chaque test.
À quoi sert @AfterAll ?
Elle ferme une ressource partagée, comme la connexion à une base de données, une fois tous les tests terminés.
Pourquoi nettoyer les données après chaque test ?
Un test qui laisse des données peut modifier le résultat du test suivant. Le nettoyage évite cet effet de bord.