Dernière modification : Dec 08 , 2024

Contenu de l'exercice

Comprendre et mettre en pratique les tests dynamiques avec JUnit 5 dans le cadre d'un projet Maven.

Objectifs de l'exercice

Le projet contient une classe Calculator qu'il convient de tester.

Etapes :

Création du projet Maven :

Ouvrez votre terminal ou invite de commandes. Utilisez la commande suivante pour créer un nouveau projet Maven interactif :


mvn archetype:generate -DgroupId=com.example -DartifactId=monprojet -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

Structure du projet :

Allez dans le répertoire du projet nouvellement créé :


cd monprojet

Configuration du fichier pom.xml :

Ouvrez le fichier pom.xml avec votre éditeur de texte préféré. Ajoutez la dépendance JUnit 5 dans la section :


<dependencies>
    <!-- ... autres dépendances ... -->
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>5.8.1</version>
        <scope>test</scope>
    </dependency>
</dependencies>

Installation des dépendances :

Retournez dans le terminal et exécutez la commande Maven pour télécharger les dépendances :


mvn clean install

Création de tests dynamiques :

Créez un nouveau fichier de test dans le répertoire src/test/java/com/example (assurez-vous que le package correspond à celui défini dans le fichier pom.xml). Créez une classe de test avec des méthodes de tests dynamiques :


import org.junit.jupiter.api.DynamicTest;
import org.junit.jupiter.api.TestFactory;
import java.util.stream.Stream;
import static org.junit.jupiter.api.Assertions.assertEquals;

public class TestsDynamiques {

    @TestFactory
    Stream<DynamicTest> multiplicationParDeux() {
        return Stream.of(1, 2, 3, 4, 5)
                .map(nombre ->
                        DynamicTest.dynamicTest("Test multiplication par 2 pour " + nombre, () ->
                                assertEquals(nombre * 2, nombre * 2)
                        )
                );
    }
}

Exécution des tests :

Utilisez la commande Maven pour exécuter les tests :


mvn test

### Optionel : lire depuis un fichier

Modifiez votre test pour lire les données depuis un fichier.

Création d'un fichier de données :

Créez un fichier donnees.txt dans le répertoire src/test/resources avec des données pour les tests :


1,2
3,6
5,10

Lecture du fichier et génération de tests dynamiques :

Créez une nouvelle classe de test dans le répertoire src/test/java/com/example qui lit les données du fichier et génère des tests dynamiques :


import org.junit.jupiter.api.DynamicTest;
import org.junit.jupiter.api.TestFactory;

import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
import java.util.stream.Stream;

import static org.junit.jupiter.api.Assertions.assertEquals;

public class TestsDynamiquesDepuisFichier {

    @TestFactory
    Stream<DynamicTest> testsMultiplicationParDeux() throws Exception {
        List<String> lignes = Files.readAllLines(Paths.get(getClass().getResource("/donnees.txt").toURI()));

        return lignes.stream()
                .map(ligne -> {
                    String[] valeurs = ligne.split(",");
                    int nombre = Integer.parseInt(valeurs[0]);
                    int resultatAttendu = Integer.parseInt(valeurs[1]);

                    return DynamicTest.dynamicTest("Test multiplication par 2 pour " + nombre, () ->
                            assertEquals(resultatAttendu, nombre * 2)
                    );
                });
    }
}

Résultats :

Vous devriez voir la sortie indiquant que les tests dynamiques ont été exécutés avec succès.