[JAVA] Beispielcode für das grundlegende Verspotten und Testen mit Mockito 3 + JUnit 5

Überblick

Beispielcode

Quellcodeliste

├── build.gradle
└── src
    ├── main
    │   └── java
    │       ├── Client.java
    │       └── Worker.java
    └── test
        └── java
            └── ClientTest.java

build.gradle

Gradle-Konfigurationsdatei für die Ausführung des Build-Tests.

plugins {
  id 'java'
}

repositories {
  jcenter()
}

dependencies {
  //Junit 5 eingeführt
  // https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter
  testImplementation 'org.junit.jupiter:junit-jupiter:5.6.2'

  //Einführung von Mockito 3
  // https://mvnrepository.com/artifact/org.mockito/mockito-core
  testImplementation 'org.mockito:mockito-core:3.4.6'

  //Einführung der JUnit 5 Extension Library von Mockito
  // https://mvnrepository.com/artifact/org.mockito/mockito-junit-jupiter
  testImplementation 'org.mockito:mockito-junit-jupiter:3.4.6'
}

test {
  //Einstellungen zur Verwendung der JUnit-Plattform
  useJUnitPlatform()

  //Ausgabeeinstellungen während des Testens
  testLogging {
    //Anzeige der Standardausgabe und der Standardfehlerausgabe während des Tests
    showStandardStreams true
    //Ausgabeereignis(TestLogEvent)
    events 'started', 'skipped', 'passed', 'failed'
    //Ausgabeeinstellungen, wenn eine Ausnahme auftritt(TestExceptionFormat)
    exceptionFormat 'full'
  }
}

src/main/java/Worker.java

Die Klasse, die verspottet werden soll.

public class Worker {

  //Methode mit Argument / Rückgabewert
  public int ariari(int x) {
    throw new IllegalStateException("Ausnahmen, die je nach Umgebung auftreten");
  }

  //Kein Argument / keine Rückgabewertmethode
  public void nasinasi() {
    throw new IllegalStateException("Ausnahmen, die je nach Umgebung auftreten");
  }
}

src/main/java/Client.java

Die zu testende Klasse.

public class Client {

  private Worker worker;

  //Rufen Sie eine Methode mit Argumenten und Rückgabewerten auf
  public int callAriari(int x) {
    return worker.ariari(x * 2); //Verdoppelter Wert für Arbeiter#Weitergabe an Ariari
  }

  //Rufen Sie eine Methode ohne Argumente und ohne Rückgabewert auf
  public int callNasinasi(int x) {
    worker.nasinasi(); // Worker#Rufen Sie nasinasi an
    return x * 2; //Gibt einen doppelten Wert zurück
  }
}

src/test/java/ClientTest.java

Testklasse. Verspotten Sie die Worker-Klasse mit Mockito 3 und testen Sie die Client-Klasse mit JUnit 5.

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.doThrow;

@ExtendWith(MockitoExtension.class) //JUnit 5 Erweiterung von Mockito
public class ClientTest {

  //Objekt, um Schein zu injizieren
  @InjectMocks
  private Client client = new Client();

  //Objekt zu verspotten
  @Mock
  private Worker mockedWorker;

  @Test
öffentliche Leere mit Argument_Es gibt einen Rückgabewert() {
    //Scheinverhalten: Worker#Gibt 6 zurück, wenn 2 an ariari übergeben wird
    doReturn(6).when(mockedWorker).ariari(2);
    //Prüfung: Client#1 an callAriari zu übergeben ist ein Scheinarbeiter#Pass 2 an Ariari und 6 wird zurückgegeben
    assertEquals(6, client.callAriari(1));
  }

  @Test
public void kein Argument_Kein Rückgabewert() {
    //Scheinverhalten: Worker#Tun Sie nichts, wenn Sie nasinasi anrufen
    doNothing().when(mockedWorker).nasinasi();
    //Prüfung: Client#Die Übergabe von 1 an callNasinasi ist ein Scheinarbeiter#Führen Sie nasinasi aus und erhalten Sie 2 zurück
    assertEquals(2, client.callNasinasi(1));
  }

  @Test
public void Ausnahme aufgetreten() {
    //Scheinverhalten: Worker#Wirf eine Ausnahme aus, wenn 4 an ariari übergeben wird
    doThrow(new IllegalArgumentException("Scheinausnahme")).when(mockedWorker).ariari(4);
    //Prüfung: Client#2 an callAriari zu übergeben ist ein Scheinarbeiter#Wenn Sie 4 an ariari übergeben, wird eine Ausnahme ausgelöst
    IllegalArgumentException e = assertThrows(IllegalArgumentException.class, () -> client.callAriari(2));
    //Prüfung:Die Ausnahme enthält die erwartete Nachricht
    assertEquals("Scheinausnahme", e.getMessage());
  }

  @Test
öffentlicher nichtiger sequentieller Aufruf() {
    //Scheinverhalten: Worker#Löst zweimal eine Ausnahme aus, wenn 6 an ariari übergeben wird, und gibt dann 18 zurück.
    doThrow(new IllegalArgumentException("1. Scheinausnahme"))
      .doThrow(new IllegalArgumentException("Zweite Scheinausnahme"))
      .doReturn(18)
      .when(mockedWorker).ariari(6);
    //Prüfung: Client#3 an callAriari zu übergeben ist ein Scheinarbeiter#Übergeben Sie 6 an Ariari und werfen Sie eine Ausnahme
    IllegalArgumentException e1 = assertThrows(IllegalArgumentException.class, () -> client.callAriari(3));
    assertEquals("1. Scheinausnahme", e1.getMessage());
    //Prüfung: Client#3 an callAriari zu übergeben ist ein Scheinarbeiter#Übergeben Sie 6 an Ariari und werfen Sie eine Ausnahme
    IllegalArgumentException e2 = assertThrows(IllegalArgumentException.class, () -> client.callAriari(3));
    assertEquals("Zweite Scheinausnahme", e2.getMessage());
    //Prüfung: Client#3 an callAriari zu übergeben ist ein Scheinarbeiter#Pass 6 zu Ariari und 18 wird zurückgegeben
    assertEquals(18, client.callAriari(3));
  }
}

Testlauf

Ein Beispiel für die Ausführung der Testaufgabe in Gradle.

$ gradle test

> Task :test

ClientTest >Keine Argumente_Kein Rückgabewert() STARTED

ClientTest >Keine Argumente_Kein Rückgabewert() PASSED

ClientTest >Mit Argument_Es gibt einen Rückgabewert() STARTED

ClientTest >Mit Argument_Es gibt einen Rückgabewert() PASSED

ClientTest >Ausnahme aufgetreten() STARTED

ClientTest >Ausnahme aufgetreten() PASSED

ClientTest >Sequentieller Aufruf() STARTED

ClientTest >Sequentieller Aufruf() PASSED

BUILD SUCCESSFUL in 2s
3 actionable tasks: 3 executed

Referenzmaterial

Recommended Posts

Beispielcode für das grundlegende Verspotten und Testen mit Mockito 3 + JUnit 5
Starten Sie die UI-Tests mit Dagger2 und Mockito
Schreiben Sie den Code für java.io.File mit java.nio.Path und java.nio.Files neu
Testen der Sende- und Empfangslogik von Anforderungen mit MockWebServer in JUnit
Beispielcode zum Parsen von Datum und Uhrzeit mit Java SimpleDateFormat
Docker Image-Erstellung der Keycloak-Erweiterung und Leistungstest durch Gatling
Java 9 neue Funktionen und Beispielcode
Mit Rubin ● × Game und Othello (Grundlegende Bewertung)
Verknüpfen Sie Java- und C ++ - Code mit SWIG