如何使用MockWebServer验证POST Body的内容?

时间:2016-07-22 06:34:17

标签: junit junit4 okhttp retrofit2 mockwebserver

我有几个使用Square OkHttp s MockWebServer的单元测试。测试运行得很好,一切都很好。到目前为止,我无法做的一件事就是验证POST请求的内容。

为什么我要这样做?
我开发的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()方法,但我仍然不知道从该请求主体获取实际字段和数据。

感谢您的帮助!

1 个答案:

答案 0 :(得分:9)

尝试关注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"));