我有几个使用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);
我知道MockWebServer
有takeRequest()
方法,但我仍然不知道从该请求主体获取实际字段和数据。
感谢您的帮助!
答案 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"));