2013-09-02 4 views
14

Ich versuche, eine Openid-Provider-Klasse zu testen. Die Openid-Verbraucherklasse führt eine http-Anfrage durch. Ich verspotte die Antwort auf diese Anfrage mit Wiremock. Ich versuche, eine gültige offene Antwort zu verspotten. Die gültige Antwort hängt jedoch von den Anforderungsparametern ab. Kann ich mithilfe von Wiremock eine Scheinanforderung einrichten, bei der der Hauptteil der Antwort von den Anforderungsparametern abhängt?Mit Wiremock, kann ich einen Körper zurückgeben, der von der Postanforderung abhängig ist

Antwort

0

Ich habe noch nie einen Draht verwendet. Aber gemäß ihrer online documentation können Sie einen Mock schreiben, der den URL- und Request-Body-Parametern entspricht. Sie sollten also in der Lage sein, verschiedene Mocks zurückzugeben, abhängig von den Parametern in der URL selbst oder eingebettet in den Anfragetext.

+0

Ich muss die digitale Signatur der URL für die Openid-Anfrage überprüfen. Ich denke nicht, dass dies funktioniert, also werde ich einen anderen Java http Server dafür suchen. –

2

Soweit ich weiß und meine Erfahrung mit WireMock, nein.

Sie können eine Antwort nicht mit Argumenten parametrisieren, die durch die Anforderung übergeben werden. Das Beste, was Sie tun können, ist Matcher zu verwenden, damit Ihr verspotter Server entsprechend reagiert.

Ich würde Ihnen empfehlen, einige Unit- oder Integrationstests mit plain jUnit durchzuführen, um Anfragen/Antworten in solchen Fällen zu testen. Sie sollten schneller sein, wenn Sie testen möchten, ob die Quittungsanfragen korrekt reagieren. Ich sehe WireMock als Alternative zum Abnahmetest, um sicherzustellen, dass Ihre Schnittstelle mit anderen REST-Diensten nicht beschädigt wird.

1

Ich habe das ein bisschen untersucht und die Antwort ist nein (ab heute sowieso).

Sie müssen für jede Anforderung, die eine eindeutige Antwort erfordert, eine spezifische (statische) Antwort einrichten.

5

Dies ist möglich, Sie müssen nur einen ResponseTansformer verwenden. Im folgenden Codebeispiel wird die responseDefinition durch den folgenden Stubbing bestimmt. Hier verspotte ich einen Codierdienst, indem ich einfach die Body-Bytes zurück zum Aufrufer gebe. Obwohl ich im Transformator frei bin, kann ich, was immer mir gefällt, basierend auf dem Inhalt der Anfrage zurückgeben.

int port = 8080; 
WireMockServer wireMockServer = new WireMockServer(new WireMockConfiguration().port(port).extensions(new ResponseTransformer() { 
    @Override 
    public ResponseDefinition transform(Request request, ResponseDefinition responseDefinition, FileSource files) { 
     return new ResponseDefinitionBuilder().like(responseDefinition) 
       .withBody(request.getBodyAsString().getBytes()) 
       .build(); 
    } 

    @Override 
    public String name() { 
     return "request body returning request transformer"; 
    } 
})); 
wireMockServer.start(); 
WireMock.configureFor("localhost", port); 

stubFor(post(urlEqualTo("/encode")) 
     .willReturn(aResponse() 
       .withHeader("Content-Type", "application/octet-stream") 
       .withStatus(200))); 

stubFor(post(urlEqualTo("/decode")) 
     .willReturn(aResponse() 
       .withHeader("Content-Type", "application/octet-stream") 
       .withStatus(200))); 
5

Wiremock unterstützt Erweiterungen, die Sie selbst schreiben können, die als Middleware handeln verwendet, um die Anfrage- und Antwort Körper abfangen, so dass Sie es jedoch formatiert werden, die Sie mögen. Es ist sehr flexibel und ermöglicht es Ihnen, neue Reaktionskörper dynamisch oder gar nicht zu reagieren.

Als Beispiel haben wir eine Erweiterung für OpenTable geschrieben und Open Source auf Maven Central. Es ermöglicht Ihnen, die JSON-Attribute als Variablen zu behandeln und sie in Ihren Antworttext zu interpolieren. Hör zu. Lassen Sie uns wissen, wie es läuft oder wenn Sie Fragen haben. https://github.com/opentable/wiremock-body-transformer

Verwandte Themen