JUnit - 4.1 Maîtriser @BeforeEach et @AfterEach

Dans les tests unitaires, plusieurs tests ont souvent besoin des mêmes préparatifs, comme la création d'un objet. Les annotations @BeforeEach et @AfterEach de JUnit permettent d'exécuter du code avant et après chaque test. Cette leçon explique leur fonctionnement et leur utilité.

@BeforeEach : préparer avant chaque test

Une méthode annotée avec @BeforeEach est exécutée avant chaque méthode de test de la classe. Elle sert à initialiser des ressources, par exemple créer un objet à tester.

Les méthodes annotées avec @BeforeEach ne prennent aucun argument.

@AfterEach : nettoyer après chaque test

Une méthode annotée avec @AfterEach est exécutée après chaque test. Elle sert à nettoyer, par exemple à supprimer des données créées pendant le test, comme des données en base de données.

Aller plus loin avec @BeforeAll et @AfterAll

Les annotations @BeforeAll et @AfterAll s'exécutent une seule fois, avant ou après tous les tests de la classe. Elles seront présentées dans la suite du cours.

En résumé

@BeforeEach exécute du code avant chaque test, et @AfterEach exécute du code après chaque test. Elles évitent de répéter les mêmes préparatifs dans chaque test. Les méthodes annotées ne prennent aucun argument. Les variantes @BeforeAll et @AfterAll s'exécutent une seule fois pour toute la classe.

Points clés

  • @BeforeEach exécute une méthode avant chaque test.
  • @AfterEach exécute une méthode après chaque test.
  • Ces annotations évitent de répéter les mêmes préparatifs dans chaque test.
  • Les méthodes annotées ne prennent aucun argument.
  • @BeforeAll et @AfterAll s'exécutent une seule fois pour toute la classe.

Questions fréquentes

Faut-il appeler les méthodes @BeforeEach manuellement ?

Non. JUnit les exécute automatiquement avant chaque test.

Quand utiliser @AfterEach ?

Pour nettoyer après un test, par exemple supprimer les données créées pendant le test en base de données.

Quelle est la différence avec @BeforeAll ?

@BeforeAll s'exécute une seule fois avant tous les tests de la classe, alors que @BeforeEach s'exécute avant chaque test.