[JAVA] So überprüfen Sie variable Elemente mit RequestBodyMatching von WireMock

Ich benutze WireMock oft, wenn ich einen verspotteten Test der anderen Partei durchführen möchte. Es kann auch ein Anforderungsabgleich durchgeführt werden, was sehr praktisch ist.

stubFor(post(urlEqualTo("/mockurl"))
    .withRequestBody(equalToJson(REQUEST_JSON_STRING))
    .willReturn(aResponse().withStatus(200).withHeader("Content-Type", "application/json")
    .withBody(RESPONSE_JSON_STRING)));

Wenn Sie wie oben schreiben, wird "RESPONSE_JSON_STRING" nur zurückgegeben, wenn eine JSON-Nachricht akzeptiert wird, die mit "REQUEST_JSON_STRING" übereinstimmt.

Jedoch,

Es gibt viele Gegenstände, die schwer zu finden sind.

{
    "token": "uPx2bB9"
    "accept_date": "2018-01-01T00:00:00.000Z",
}

Wenn Sie "REQUEST_JSON_STRING" aus einer Datei lesen möchten, möchten Sie auch nicht so viele Dateien vorbereiten, wie variable Elemente vorhanden sind.

Fügen Sie in einem solchen Fall ein Argument zu "gleichToJson" hinzu.

StringValuePattern com.github.tomakehurst.wiremock.client.WireMock.equalToJson(String value, boolean ignoreArrayOrder, boolean ignoreExtraElements)

Durch Setzen von "ignoreExtraElements = true" werden Elemente, die in "value" nicht vorhanden sind, ignoriert.

stubFor(post(urlEqualTo("/mockurl"))
    .withRequestBody(equalToJson(REQUEST_JSON_STRING, true, true))
    .willReturn(aResponse().withStatus(200).withHeader("Content-Type", "application/json")
    .withBody(RESPONSE_JSON_STRING)));

Wenn Sie es wie oben einstellen,

REQUEST_JSON_STRING

{
    "name": "hoge",
    "data": {
        "value": 1000
    }
}

Tatsächliche Anfrage:

{
    "name": "hoge",
    "data": {
        "token": "uPx2bB9",
        "id": "abcde",
        "value": 1000
    }
}

Das Match ist jedoch erfolgreich (die Elemente "Token" und "ID" werden ignoriert). Sie können auch "matchingJsonPath" verwenden, um ignorierte Elemente zu überprüfen.

StringValuePattern com.github.tomakehurst.wiremock.client.WireMock.matchingJsonPath(String value)

Wenn Sie überprüfen möchten, ob das Element vorhanden ist (Wenn die aktuelle Zeit oder zufällige Zeichenfolge von der Anwendung ausgegeben wird und es schwierig ist, sie zu vergleichen)

stubFor(post(urlEqualTo("/mockurl"))
    .withRequestBody(equalToJson(REQUEST_JSON_STRING, true, true))
    .withRequestBody(matchingJsonPath("$.data.token")) // "token"Stellen Sie sicher, dass ein Element vorhanden ist
    .willReturn(aResponse().withStatus(200).withHeader("Content-Type", "application/json")
    .withBody(RESPONSE_JSON_STRING)));

Wenn Sie auch den Wert eines Elements überprüfen möchten (Zum Beispiel, wenn Sie variable Elemente anhand der Testdaten überprüfen möchten.)

stubFor(post(urlEqualTo("/mockurl"))
    .withRequestBody(equalToJson(REQUEST_JSON_STRING, true, true))
    .withRequestBody(matchingJsonPath("$.data[?(@.id == 'abcde')]")) // "id"Überprüfen Sie den Wert von
    .willReturn(aResponse().withStatus(200).withHeader("Content-Type", "application/json")
    .withBody(RESPONSE_JSON_STRING)));

Recommended Posts

So überprüfen Sie variable Elemente mit RequestBodyMatching von WireMock
Wie man mit html.erb nummeriert (nummeriert)
So aktualisieren Sie mit activerecord-import
Wie fange ich mit schlank an?
Wie man ein Zeichen mit "~" einschließt
Wie man mssql-tools mit alpine benutzt
So schreiben Sie eine Java-Variablendeklaration
So starten Sie Camunda mit Docker
So beschneiden Sie ein Bild in libGDX
So passen Sie TextPosition mit der iOS-Tastaturerweiterung an
So teilen Sie Dateien mit Docker Toolbox
So kompilieren Sie Java mit VsCode & Ant
[Java] Fassen Sie zusammen, wie Sie mit der Methode equals vergleichen können
[Android] Wie man mit dunklen Themen umgeht
Verwendung von BootStrap mit Play Framework
So wechseln Sie Miniaturbilder mit JavaScript
[Hinweis] Erste Schritte mit Rspec
API-basierte Steuerung mit cancancan
So erreichen Sie den Dateidownload mit Feign
So aktualisieren Sie verwandte Modelle mit accept_nested_attributes_for
So setzen Sie JAVA_HOME mit dem Appassembler-Maven-Plugin von Maven
So behandeln Sie Anmeldefehler mit devise
So löschen Sie Daten mit einem externen Schlüssel
So überwachen Sie Nginx mit Docker-Compose mit Datadog
Der Umgang mit dem Vorkompilieren von Assets ist fehlgeschlagen.
So erreichen Sie das Hochladen von Dateien mit Feign
So führen Sie Blazor (C #) mit Docker aus
So erstellen Sie eine Rails 6-Umgebung mit Docker
So laden Sie Oracle JDK 8 U / min mit Curl herunter
[Java] So testen Sie, ob es in JUnit null ist
Ich habe versucht, AdoptOpenJDK 11 (11.0.2) mit dem Docker-Image zu überprüfen
Wie man jeden Fall mit PowerMock + Mockito1x verspottet
Verwendung von MyBatis2 (iBatis) mit Spring Boot 1.4 (Spring 4)
So speichern Sie mit einer Eingabe in mehreren Tabellen
So testen Sie Interrupts während Thread.sleep mit JUnit
Verwendung des eingebauten h2db mit Federstiefel
Verwendung des Java-Frameworks mit AWS Lambda! ??
So erstellen Sie mit ActiveHash mehrere Pulldown-Menüs
Verwendung der Java-API mit Lambda-Ausdrücken
So geben Sie jemandem Ihr Image mit Docker
So fügen Sie mit MyBatis alles auf einmal ein
So schreiben Sie Testcode mit Basic-Zertifizierung
So erstellen Sie eine API mit GraphQL und Rails
So löschen Sie eine Ressourcendatei mit Spring-Boot
So erstellen Sie Elementvariablen mit dem JPA-Modell
[Rails] So erstellen Sie eine Umgebung mit Docker
So vermeiden Sie Ausnahmen mit der Java-Methode equals
So leiten Sie nach der Benutzeranmeldung mit Spring-security um
Einbetten von JavaScript-Variablen in HTML mit Thymeleaf
So implementieren Sie UICollectionView mit Code nur in Swift
So ändern Sie die Aktion mit mehreren Senden-Schaltflächen
So sortieren Sie mit SQLite in aufsteigender / absteigender Reihenfolge