Dernière modification : Dec 08 , 2024
Dernière modification : Dec 08 , 2024

Contenu de l'exercice

Apprendre à configurer un projet Maven avec JUnit 5 pour réaliser des tests unitaires dans un environnement Java.

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>

Notez que la portée (<scope>) est définie sur "test" car JUnit est utilisé pour les tests unitaires.

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 d'un premier test JUnit 5 :

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 simple :

package com.example;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

public class MonTest {

    @Test
    public void premierTest() {
        assertEquals(4, 2 + 2);
    }
}

Exécution des tests :

Utilisez la commande Maven pour exécuter les tests :


mvn test

Résultats :

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

Mixer JUnit 3-4 avec JUnit 5

Parfois il est nécessaire de faire tourner les deux versions de JUnit ensemble.

Moteur vintage JUnit

Le moteur junit-vintage est conçu pour les tests écrits dans les anciennes versions de JUnit, telles que JUnit 3 et JUnit 4. Ce moteur offre une compatibilité descendante avec les anciennes versions de JUnit. De plus, il permet d'utiliser des tests plus anciens tout en profitant des nouvelles fonctionnalités de JUnit 5.

L'un des principaux avantages du moteur junit-vintage est l'environnement de test cohérent pour les tests plus anciens. De plus, il fonctionne bien avec les nouveaux tests JUnit. Cela facilite la migration progressive des tests vers JUnit 5 sans effectuer une migration complète en une seule fois. Le moteur junit-vintage prend également en charge un large éventail d'exécuteurs et de frameworks de tests, ce qui facilite son intégration aux flux de développement existants.

Cependant, le moteur junit-vintage présente certaines limites. Il est conçu pour exécuter des tests écrits dans d’anciennes versions de JUnit. Ainsi, il ne prend pas en charge les fonctionnalités et capacités les plus récentes de JUnit 5, telles que les tests imbriqués et paramétrés. De plus, certaines configurations et paramètres du moteur junit-jupiter ne sont pas disponibles dans le moteur junit-vintage.

Moteur JUnit Jupiter

Le moteur junit-jupiter est le moteur de test par défaut dans JUnit 5. Il est conçu pour tirer parti des nouvelles fonctionnalités de la plate-forme JUnit 5. Ce moteur fournit une large gamme de styles et de paradigmes de test, notamment des tests paramétrés, imbriqués et dynamiques, ce qui en fait un outil très polyvalent pour tester les applications Java.

L'un des principaux avantages du moteur junit-jupiter est son architecture modulaire, qui le rend hautement extensible et personnalisable. Cela signifie que les développeurs peuvent facilement ajouter de nouvelles fonctionnalités au framework en écrivant des extensions et des plugins personnalisés. Le moteur junit-jupiter fournit également un riche ensemble de méthodes d'assertion qui simplifient le test de divers objets et structures de données.

Cependant, un inconvénient potentiel du moteur junit-jupiter est qu'il peut nécessiter une configuration et une configuration supplémentaires par rapport au moteur junit-vintage. Cela est particulièrement vrai si les développeurs migrent à partir d'anciennes versions de JUnit. Le moteur junit-jupiter peut rencontrer des problèmes pour exécuter des tests plus anciens écrits à l'aide des frameworks JUnit 3 ou JUnit 4.

Modification du fichier Maven

      <dependency>
        <groupId>org.junit.vintage</groupId>
        <artifactId>junit-vintage-engine</artifactId>
        <version>5.8.1</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>5.8.1</version>
        <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>

Ajouter un test mixant les deux API

Créer un fichier Java contenant un code similaire :

import org.junit.Test;
import org.junit.jupiter.api.DisplayName;
import static org.junit.Assert.*;

public class MonTest {

    @Test
    @DisplayName("Test JUnit Vintage")
    public void testJUnitVintage() {
        assertEquals(4, 2 + 2);
    }

    @org.junit.jupiter.api.Test
    @DisplayName("Test JUnit 5")
    public void testJUnit5() {
        assertEquals(8, 4 * 2);
    }
}

Option : revue de la configuration du plugin maven-surefire-plugin

Regardez les différentes options d'intégration offertes par maven-surefire avec JUNIT5.

Conclusion :

Félicitations, vous avez réussi à configurer un projet Maven avec JUnit 5 et à exécuter un test unitaire de base. Cette configuration de base peut être étendue pour inclure d'autres fonctionnalités de JUnit 5 selon les besoins de votre projet.