Présentation des tests Java automatisés avec JUnit 5 + Apache Maven

Aperçu

Cet environnement

Échantillon de base de JUnit 5 + Apache Maven

Liste des codes sources

├── pom.xml
└── src
    ├── main
    │   └── java
    │       └── myapp
    │           └── Calc.java
    └── test
        └── java
            └── myapp
                └── CalcTest.java

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>mygroup</groupId>
  <artifactId>myapp</artifactId>
  <packaging>jar</packaging>
  <version>1.0.0</version>
  <name>myapp</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
  </properties>

  <build>
    <plugins>
      <!--Introduction du plug-in requis pour l'exécution des tests dans JUnit 5-->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>3.0.0-M5</version>
      </plugin>
    </plugins>
  </build>

  <dependencies>
    <!--Introduction de la bibliothèque requise pour écrire le code de test-->
    <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-api</artifactId>
      <version>5.7.0</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

référence:

Calc.java

package myapp;

public class Calc {

  private int base;

  //Définir une valeur de référence
  public Calc(int base) {
    this.base = base;
  }

  //Ajouter
  public int plus(int num) {
    return base + num;
  }

  //Tirer
  public int minus(int num) {
    return base - num;
  }
}

CalcTest.java

package myapp;

import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

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

class CalcTest {

  //Exécuter une seule fois avant le début du test
  @BeforeAll
  static void beforeAll() {
    System.out.println("Démarrer CalcTest");
  }

  //Exécuter une seule fois après le début du test
  @AfterAll
  static void afterAll() {
    System.out.println("CalcTest terminé");
  }

  //Exécuté avant le début de chaque méthode de test
  @BeforeEach
  void beforeEach() {
    System.out.println("Démarrer une méthode de test pour CalcTest");
  }

  //Exécuté après le début de chaque méthode de test
  @AfterEach
  void afterEach() {
    System.out.println("Terminer une méthode de test de CalcTest");
  }

  //Les méthodes de test ne doivent pas être privées ou statiques
  //La valeur de retour doit être void car la valeur ne peut pas être retournée.
  @Test
  void testPlus() {
    System.out.println("Exécutez testPlus: 2 + 3 = 5");
    Calc calc = new Calc(2);
    //1er argument:résultat attendu attendu
    //2ème argument:résultat réel de l'exécution
    //3e argument:message Message de sortie en cas d'échec
    assertEquals(5, calc.plus(3), "2 + 3 =Vérification de 5");
  }

  @Test
  void testMinus() {
    System.out.println("Exécuter testMinus: 5 - 2 = 3");
    Calc calc = new Calc(5);
    assertEquals(3, calc.minus(2), "5 - 2 =Vérification de 3");
  }
}

référence:

Exemple de test réussi

$ mvn test
[INFO] Scanning for projects...
[INFO] 
[INFO] ---------------------------< mygroup:myapp >----------------------------
[INFO] Building myapp 1.0.0
[INFO] --------------------------------[ jar ]---------------------------------
(Omission)
[INFO] --- maven-surefire-plugin:3.0.0-M5:test (default-test) @ myapp ---
[INFO] 
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running myapp.CalcTest
Démarrer CalcTest
Démarrer une méthode de test pour CalcTest
Exécuter testMinus: 5 - 2 = 3
Terminer une méthode de test de CalcTest
Démarrer une méthode de test pour CalcTest
Exécutez testPlus: 2 + 3 = 5
Terminer une méthode de test de CalcTest
CalcTest terminé
[INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.087 s - in myapp.CalcTest
[INFO] 
[INFO] Results:
[INFO] 
[INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

Exemple d'échec de test

$ mvn test
[INFO] Scanning for projects...
[INFO] 
[INFO] ---------------------------< mygroup:myapp >----------------------------
[INFO] Building myapp 1.0.0
[INFO] --------------------------------[ jar ]---------------------------------
(Omission)
[INFO] --- maven-surefire-plugin:3.0.0-M5:test (default-test) @ myapp ---
[INFO] 
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running myapp.CalcTest
Démarrer CalcTest
Démarrer une méthode de test pour CalcTest
Exécuter testMinus: 5 - 2 = 3
Terminer une méthode de test de CalcTest
Démarrer une méthode de test pour CalcTest
Exécutez testPlus: 2 + 3 = 5
Terminer une méthode de test de CalcTest
CalcTest terminé
[ERROR] Tests run: 2, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.063 s <<< FAILURE! - in myapp.CalcTest
[ERROR] myapp.CalcTest.testMinus  Time elapsed: 0.026 s  <<< FAILURE!
org.opentest4j.AssertionFailedError: 5 - 2 =Vérification de 3==> expected: <3> but was: <7>
  at myapp.CalcTest.testMinus(CalcTest.java:53)

[INFO] 
[INFO] Results:
[INFO] 
[ERROR] Failures: 
[ERROR]   CalcTest.testMinus:53 5 - 2 =Vérification de 3==> expected: <3> but was: <7>
[INFO] 
[ERROR] Tests run: 2, Failures: 1, Errors: 0, Skipped: 0
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------

Échantillon à tester collectivement avec assertAll

Exemple de code

package myapp;

import org.junit.jupiter.api.Test;

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

class CalcTest {

  @Test
  void testPlus() {
    Calc calc = new Calc(10);
    //Vérifier collectivement
    //Même si cela échoue au milieu, vérifiez tout sans vous arrêter
    assertAll(
     () -> assertEquals(30, calc.plus(20)),
     () -> assertEquals(99, calc.plus(90)),
     () -> assertEquals(11, calc.plus(50)),
     () -> assertEquals(40, calc.plus(30))
    );
  }
}

référence:

Exemple d'échec de test

$ mvn test
[INFO] Scanning for projects...
[INFO] 
[INFO] ---------------------------< mygroup:myapp >----------------------------
[INFO] Building myapp 1.0.0
[INFO] --------------------------------[ jar ]---------------------------------
(Omission)
[INFO] --- maven-surefire-plugin:3.0.0-M5:test (default-test) @ myapp ---
[INFO] 
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running myapp.CalcTest
[ERROR] Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.067 s <<< FAILURE! - in myapp.CalcTest
[ERROR] myapp.CalcTest.testPlus  Time elapsed: 0.044 s  <<< FAILURE!
org.opentest4j.MultipleFailuresError: 
Multiple Failures (2 failures)
  org.opentest4j.AssertionFailedError: expected: <99> but was: <100>
  org.opentest4j.AssertionFailedError: expected: <11> but was: <60>
  at myapp.CalcTest.testPlus(CalcTest.java:15)

[INFO] 
[INFO] Results:
[INFO] 
[ERROR] Failures: 
[ERROR]   CalcTest.testPlus:15 Multiple Failures (2 failures)
  org.opentest4j.AssertionFailedError: expected: <99> but was: <100>
  org.opentest4j.AssertionFailedError: expected: <11> but was: <60>
[INFO] 
[ERROR] Tests run: 1, Failures: 1, Errors: 0, Skipped: 0
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------

Échantillon de test d'occurrence d'exception

package myapp;

import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.fail;

class CalcTest {

  @Test
  void testPlus() {
    Calc calc = new Calc(100);
    //En supposant qu'une ArithmeticException se produira si elle est divisée par 0
    ArithmeticException e =
      assertThrows(ArithmeticException.class,
        () -> calc.divide(0));
    assertTrue(e instanceof ArithmeticException);
  }
}

Matériel de référence

Recommended Posts

Présentation des tests Java automatisés avec JUnit 5 + Apache Maven
Présentation du test Java automatisé avec JUnit 5 + Gradle
[CircleCI 2.0] [Java] [Maven] [JUnit] Agréger les résultats des tests JUnit avec CircleCI 2.0
[Java] Tester des méthodes privées avec JUnit
[Java] Comment tester s'il est nul dans JUnit
Faites un test unitaire avec Junit.
[Java] Exemple de cas de test JUnit 4
Tester l'API Web avec junit
Essayez gRPC avec Java, Maven
[Java] Je souhaite tester l'entrée standard et la sortie standard avec JUnit
Sortie du rapport de test JUnit dans Maven
Contrôleur de cadre de test Spring avec Junit
Contrôler l'ordre de test dans Junit4 avec un type d'énumération
Test Java EE (CDI / intercepteur) avec Arquillian
[Java] Gérer les fichiers Excel avec Apache POI
Application Java CICS-Run - (2) Gestion de build avec Maven
Comment tester l'étendue privée avec JUnit
Le test JUnit 5 Gradle génère une erreur avec l'annotation Lombok
Créez un environnement Apache et Tomcat avec Docker. À propos, coopération Maven & Java
Comment tester les interruptions pendant Thread.sleep avec JUnit
Déployez des applications Web Java sur Azure avec maven
Créez et testez des applications Java + Gradle avec Wercker
Test JUnit facile de la version Elasticsearch 2018 avec Embedded-elasticsearch
Créer un environnement de test E2E avec Selenium (Java)
[Java] Hello World avec Java 14 x Spring Boot 2.3 x JUnit 5 ~
Tester le code à l'aide d'une maquette avec JUnit (centre EasyMock)
Dépôt Java d'Eclipse avec Maven: artefact manquant ~
Mélanger les cas de test avec JUnit 5 et les méthodes par défaut
java, mémo maven
Tester le contenu d'un fichier Excel avec JUnit
[Compatible JUnit 5] Ecrire un test en utilisant JUnit 5 avec Spring boot 2.2, 2.3
Recherche par requête POST avec Azure Search + Java Apache HttpClient
[JUnit 5] Ecrivez un test de validation avec Spring Boot! [Test de paramétrage]
Test unitaire de l'API Web et test d'intégration avec SpringBoot + Junit5, 4 modèles
J'ai écrit un test avec Spring Boot + JUnit 5 maintenant