Einführung automatisierter Java-Tests mit JUnit 5 + Apache Maven

Überblick

--Schreiben Sie ein grundlegendes Beispiel für automatisierte Java-Tests mit JUnit 5 + Apache Maven

Diese Umgebung

Basisbeispiel von JUnit 5 + Apache Maven

Quellcodeliste

├── 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>
      <!--Einführung des für die Testausführung erforderlichen Plug-Ins in JUnit 5-->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>3.0.0-M5</version>
      </plugin>
    </plugins>
  </build>

  <dependencies>
    <!--Einführung der zum Schreiben von Testcode erforderlichen Bibliothek-->
    <!-- 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>

Referenz:

Calc.java

package myapp;

public class Calc {

  private int base;

  //Stellen Sie einen Referenzwert ein
  public Calc(int base) {
    this.base = base;
  }

  //Hinzufügen
  public int plus(int num) {
    return base + num;
  }

  //ziehen
  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 {

  //Nur einmal ausführen, bevor der Test beginnt
  @BeforeAll
  static void beforeAll() {
    System.out.println("Starten Sie CalcTest");
  }

  //Nach Teststart nur einmal ausführen
  @AfterAll
  static void afterAll() {
    System.out.println("CalcTest beendet");
  }

  //Wird ausgeführt, bevor jede Testmethode gestartet wird
  @BeforeEach
  void beforeEach() {
    System.out.println("Starten Sie eine Testmethode für CalcTest");
  }

  //Wird ausgeführt, nachdem jede Testmethode gestartet wurde
  @AfterEach
  void afterEach() {
    System.out.println("Beenden Sie eine Testmethode von CalcTest");
  }

  //Testmethoden sollten nicht privat oder statisch sein
  //Der Rückgabewert sollte ungültig sein, da der Wert nicht zurückgegeben werden kann.
  @Test
  void testPlus() {
    System.out.println("Führen Sie testPlus aus: 2 + 3 = 5");
    Calc calc = new Calc(2);
    //1. Argument:erwartetes erwartetes Ergebnis
    //2. Argument:tatsächliches Ausführungsergebnis
    //3. Argument:message Ausgabe der Nachricht bei einem Fehler
    assertEquals(5, calc.plus(3), "2 + 3 =Überprüfung von 5");
  }

  @Test
  void testMinus() {
    System.out.println("Führen Sie testMinus aus: 5 - 2 = 3");
    Calc calc = new Calc(5);
    assertEquals(3, calc.minus(2), "5 - 2 =Überprüfung von 3");
  }
}

Referenz:

Beispiel für einen erfolgreichen Test

$ mvn test
[INFO] Scanning for projects...
[INFO] 
[INFO] ---------------------------< mygroup:myapp >----------------------------
[INFO] Building myapp 1.0.0
[INFO] --------------------------------[ jar ]---------------------------------
(Unterlassung)
[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
Starten Sie CalcTest
Starten Sie eine Testmethode für CalcTest
Führen Sie testMinus aus: 5 - 2 = 3
Beenden Sie eine Testmethode von CalcTest
Starten Sie eine Testmethode für CalcTest
Führen Sie testPlus aus: 2 + 3 = 5
Beenden Sie eine Testmethode von CalcTest
CalcTest beendet
[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] ------------------------------------------------------------------------

Beispiel für einen Testfehler

$ mvn test
[INFO] Scanning for projects...
[INFO] 
[INFO] ---------------------------< mygroup:myapp >----------------------------
[INFO] Building myapp 1.0.0
[INFO] --------------------------------[ jar ]---------------------------------
(Unterlassung)
[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
Starten Sie CalcTest
Starten Sie eine Testmethode für CalcTest
Führen Sie testMinus aus: 5 - 2 = 3
Beenden Sie eine Testmethode von CalcTest
Starten Sie eine Testmethode für CalcTest
Führen Sie testPlus aus: 2 + 3 = 5
Beenden Sie eine Testmethode von CalcTest
CalcTest beendet
[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 =Überprüfung von 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 =Überprüfung von 3==> expected: <3> but was: <7>
[INFO] 
[ERROR] Tests run: 2, Failures: 1, Errors: 0, Skipped: 0
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------

Probe zum gemeinsamen Testen mit assertAll

Beispielcode

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);
    //Gemeinsam überprüfen
    //Auch wenn es in der Mitte fehlschlägt, überprüfen Sie alles, ohne anzuhalten
    assertAll(
     () -> assertEquals(30, calc.plus(20)),
     () -> assertEquals(99, calc.plus(90)),
     () -> assertEquals(11, calc.plus(50)),
     () -> assertEquals(40, calc.plus(30))
    );
  }
}

Referenz:

Beispiel für einen Testfehler

$ mvn test
[INFO] Scanning for projects...
[INFO] 
[INFO] ---------------------------< mygroup:myapp >----------------------------
[INFO] Building myapp 1.0.0
[INFO] --------------------------------[ jar ]---------------------------------
(Unterlassung)
[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] ------------------------------------------------------------------------

Testmuster für das Auftreten von Ausnahmen

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);
    //Angenommen, eine ArithmeticException tritt auf, wenn sie durch 0 geteilt wird
    ArithmeticException e =
      assertThrows(ArithmeticException.class,
        () -> calc.divide(0));
    assertTrue(e instanceof ArithmeticException);
  }
}

Referenzmaterial

Recommended Posts

Einführung automatisierter Java-Tests mit JUnit 5 + Apache Maven
Einführung eines automatisierten Java-Tests mit JUnit 5 + Gradle
[CircleCI 2.0] [Java] [Maven] [JUnit] Aggregieren Sie die JUnit-Testergebnisse mit CircleCI 2.0
[Java] Testen Sie private Methoden mit JUnit
[Java] So testen Sie, ob es in JUnit null ist
Machen Sie einen Unit-Test mit Junit.
[Java] JUnit4-Testfallbeispiel
Testen Sie die Web-API mit junit
Versuchen Sie gRPC mit Java, Maven
[Java] Ich möchte Standardeingabe und Standardausgabe mit JUnit testen
JUnit-Testbericht in Maven ausgeben
Testen Sie den Spring Framework Controller mit Junit
Steuern Sie die Testreihenfolge in Junit4 mit einem Aufzählungstyp
Java EE Test (CDI / Interceptor) mit Arquillian
[Java] Behandeln Sie Excel-Dateien mit Apache POI
CICS-Java-Anwendung ausführen- (2) Build-Management mit Maven
So testen Sie den privaten Bereich mit JUnit
Der JUnit 5-Gradle-Test führt zu einem Fehler mit der Lombok-Annotation
Erstellen Sie mit Docker eine Apache- und Tomcat-Umgebung. Übrigens Maven & Java Kooperation
So testen Sie Interrupts während Thread.sleep mit JUnit
Stellen Sie Java-Webanwendungen mit maven in Azure bereit
Erstellen und testen Sie Java + Gradle-Anwendungen mit Wercker
Einfacher JUnit-Test der Elasticsearch 2018-Version mit Embedded-Elasticsearch
Erstellen Sie eine E2E-Testumgebung mit Selenium (Java).
[Java] Hallo Welt mit Java 14 x Spring Boot 2.3 x JUnit 5 ~
Testcode mit Mock mit JUnit (EasyMock Center)
Java Repository von Eclipse mit Maven: Fehlendes Artefakt ~
Mischen Sie Testfälle mit JUnit 5 und Standardmethoden
Java, Maven Memo
Testen Sie den Inhalt einer Excel-Datei mit JUnit
[JUnit 5-kompatibel] Schreiben Sie einen Test mit JUnit 5 mit Spring Boot 2.2, 2.3
Suche nach POST-Anforderung mit Azure Search + Java Apache HttpClient
[JUnit 5] Schreiben Sie einen Validierungstest mit Spring Boot! [Parametrisierungstest]
Web-API-Komponententest und Integrationstest mit SpringBoot + Junit5, 4 Muster
Ich habe jetzt einen Test mit Spring Boot + JUnit 5 geschrieben