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.