2016-07-22 93 views
2

我有幾個單元測試,使用正方形OkHttp s MockWebServer。測試運行良好,一切正常。至今我無法做的一件事是驗證POST請求的內容。如何使用MockWebServer驗證POST Body的內容?

爲什麼我要這樣做?
我正在開發的REST 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()的方法,但我堅持用得到實際的領域,來自該請求主體的數據。

謝謝你的幫助!

回答

2

嘗試以下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

好吧,這不是100%的解決我的問題,但它把我推到正確的方向。 'readUtf8()'用HTML編碼的表單域返回正文。我仍然需要解碼字符串,將它反序列化爲一個Map,然後檢查鍵和值。 – ASP