Was macht unit-test-wiremock-rest-api?
Stellt Patterns für das Unit-Testen externer REST-APIs mit WireMock bereit. Stubt API-Antworten, überprüft Anfragedetails, simuliert Fehler (Timeouts, 4xx/5xx-Fehler) und validiert das Verhalten von HTTP-Clients ohne echte Netzwerkaufrufe. Verwenden Sie diese Fähigkeit beim Testen von Service-Integrationen mit externen APIs oder beim Mocken von HTTP-Endpunkten.
Warum WireMock?
WireMock ist eine beliebte Bibliothek zum Mocken von HTTP-basierten APIs. Sie ermöglicht:
- Stubbing: Definieren Sie serverseitige Antworten für bestimmte Anfragen.
- Verifizierung: Stellen Sie sicher, dass Ihr Client die erwarteten Anfragen gesendet hat.
- Fehlersimulation: Testen Sie das Verhalten Ihres Codes bei Timeouts, 4xx- und 5xx-Fehlern.
Verwendung
Maven-Abhängigkeit
Fügen Sie Ihrer pom.xml folgende Abhängigkeit hinzu:
<dependency>
<groupId>org.wiremock</groupId>
<artifactId>wiremock</artifactId>
<version>3.3.1</version>
<scope>test</scope>
</dependency>
Beispiel: Stubbing einer API-Antwort
import static com.github.tomakehurst.wiremock.client.WireMock.*;
public class MyApiTest {
@Test
void testGetUser() {
// Stub einer GET-Anfrage
stubFor(get(urlEqualTo("/api/users/1"))
.willReturn(aResponse()
.withStatus(200)
.withHeader("Content-Type", "application/json")
.withBody("{\"id\":1,\"name\":\"John Doe\"}")));
// Ihr Testcode, der den HTTP-Client verwendet
// ...
// Optional: Verifizieren, dass die Anfrage gesendet wurde
verify(getRequestedFor(urlEqualTo("/api/users/1")));
}
}
Beispiel: Simulieren eines Fehlers
@Test
void testTimeout() {
stubFor(get(urlEqualTo("/api/slow"))
.willReturn(aResponse()
.withFixedDelay(5000))); // 5 Sekunden Verzögerung
// Ihr Testcode sollte Timeout behandeln
}
@Test
void testServerError() {
stubFor(get(urlEqualTo("/api/error"))
.willReturn(aResponse()
.withStatus(500)
.withBody("Interner Serverfehler")));
// Ihr Testcode sollte den 500er Fehler behandeln
}
Best Practices
- Isolieren Sie Tests: Verwenden Sie für jeden Test einen separaten WireMock-Server oder setzen Sie Stubs zurück.
- Verwenden Sie aussagekräftige Stubs: Definieren Sie Stubs, die reale API-Antworten repräsentieren.
- Testen Sie Fehlerszenarien: Stellen Sie sicher, dass Ihre Anwendung Netzwerkfehler wie Timeouts und Serverfehler graceful behandelt.
- Verifizieren Sie Anfragen: Nutzen Sie
verify(), um sicherzustellen, dass Ihr Client die richtigen Anfragen mit den korrekten Headern und dem Body sendet.
Lizenz
Dieses Projekt ist unter der MIT-Lizenz lizenziert.