Cycle de Vie des Tests Unitaires JUnit 4 et Intégration Spring Boot

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 être public 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éthode public static void. Utilisée pour libérer les ressources globales.
  • @Before : S'exécute avant chaque méthode de test. Méthode public void. Permet de préparer l'environnement pour chaque test individuel.
  • @After : S'exécute après chaque méthode de test. Méthode public void. Sert au nettoyage post-test.
  • @Test : Marque une méthode public void comme 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) (ou SpringJUnit4ClassRunner.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"})

Étiquettes: JUnit4 SpringBoot TestsUnitaires SpringTestContext Java

Publié le 7 juillet à 04h56