├── 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));
}
}
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
Recommended Posts