2016-07-22 27 views
2

Ich habe mehrere Unit-Tests, die Quadrate OkHttp s MockWebServer verwenden. Die Tests laufen gut und alles funktioniert sehr gut. Das Einzige, was ich bisher nicht tun konnte, ist den Inhalt der POST-Anfragen zu verifizieren.Wie kann ich den Inhalt einer POST-Nachricht mit MockWebServer überprüfen?

Warum möchte ich das tun?
Die REST-API, für die ich entwickle, hat einige Methoden, die erfordern, dass die Datenobjekte im POST-Requests-Body gesendet werden, andere Methoden erfordern, dass die Objekte als FormUrlEncoded-Datenfeld gesendet werden. So möchte ich sicherstellen, dass die Schnittstelle Retrofit korrekt eingerichtet wurde. zur Spezifikation.

Die folgende Unit-Test wird vorübergehen, aber der erste sendet im Inneren des Körpers, die Daten falsch:

//Incorrect 
@POST("api/v1/user/senddata") 
Observable<Void> senddata (
     @Path("VIN") String vin, 
     @Body PoiWrapper wrappedPoi); 

//Correct 
@FormUrlEncoded 
@POST("api/v1/user/senddata") 
Observable<Void> senddata(
     @Path("VIN") String vin, 
     @Field("data") PoiWrapper wrappedPoi); 

weiß, dass ich die MockWebServer die takeRequest() Methode hat, aber ich bin fest mit den tatsächlichen Feld bekommen und Daten von diesem Anfragekörper.

Vielen Dank für Ihre Hilfe!

Antwort

2

Versuche folgende these examples:

RecordedRequest recordedRequest = server.takeRequest(); assertEquals("POST", recordedRequest.getMethod()); assertEquals("def", recordedRequest.getBody().readUtf8()); assertEquals("3", recordedRequest.getHeader("Content-Length")); assertEquals("text/plain; charset=utf-8", recordedRequest.getHeader("Content-Type"));

+2

Ok, das ist die Lösung für mein Problem nicht zu 100%, aber es schob mich in die richtige Richtung. Die 'readUtf8()' gibt den Rumpf mit HTML-kodierten Formularfeldern zurück. Ich muss den String noch dekodieren, zu einer 'Map' deserialisieren und dann die Schlüssel und Werte überprüfen. – ASP