2016-07-22 33 views
2

私は、スクエアを使用するいくつかのユニットテストを持っていますOkHttp s MockWebServer。テストはすべて正常に動作し、すべてがうまく動作します。これまでにできなかったことの1つは、POST要求の内容を確認することです。MockWebServerでPOST本体の内容を確認するにはどうすればよいですか?

なぜ私はそれをしたいですか?
私が開発しているApiには、データオブジェクトをPOSTリクエスト本体で送信する必要があるいくつかのメソッドがあります。他のメソッドでは、オブジェクトをFormUrlEncodedデータフィールドとして送信する必要があります。そこで私は、Retrofitインターフェイスが正しく設定されていることを確認したいと思います。仕様へ。

次のユニットテストは合格しますが、最初のものは体内に誤ったデータが送信されます。

//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); 

私はMockWebServertakeRequest()メソッドを持って知っているが、私は実際のフィールドを取得してこだわっていると、リクエスト本体からのデータ。

ありがとうございました! these examples

答えて

2

てみ:

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]を、それは100%私の問題への解決策ではないのですが、それは正しい方向に私を押しました。 'readUtf8()'は、HTMLエンコードされたフォームフィールドを持つ本文を返します。私はまだStringをデコードし、それを 'Map'にデシリアライズしてから、キーと値をチェックしなければなりません。 – ASP

関連する問題