hi stack溢出社区!
我正在尝试在某些Java集成测试中模拟微服务。
要这样做,我正在使用Mockserver版本5.5.1。要进行其余的请求,我正在使用OKHTTP版本3.13.1
Java中的代码:
final SomeDTO requestObject = new SomeDTO(someParams);
final String jsonObject = objectMapper.writeValueAsString(requestObject);
final MediaType MEDIA_TYPE_JSON = MediaType.get("application/json; charset=utf-8");
final RequestBody requestBody = RequestBody.create(MEDIA_TYPE_JSON, jsonObject);
final Request request = new Request.Builder().url("serverUrl").post(requestBody).build();
final Response response = client.newCall(request).execute();
final String responseJson = response.body().string();
final ResultDTO result = objectMapper.readValue(responseJson, ResultDTO.class);
这很好。但是,当我与匹配器相连时:
final MockServerClient client = new MockServerClient("127.0.0.1", 1080);
client.when(request().withMethod("POST") //
.withPath("serverUrl") //
.withBody(json(correctJsonString, MatchType.ONLY_MATCHING_FIELDS))) //
.respond(response().withStatusCode(200) //
.withHeaders(new Header("Content-Type", "application/json; charset=utf-8"),
new Header("Cache-Control", "public, max-age=86400"))
.withBody(responseJson));
我得到了一个 request didn't match expectation because: body didn't match
,其中尸体之间的区别是:
请求:
"body" : {
"type" : "STRING",
"string" : "{"id":33611,"prop1":28,"prop2":"value2","graph":[...]}",
"contentType" : "text/plain; charset=utf-8"
}
请求应匹配:
"body" : {
"type" : "JSON",
"json" : "{"prop2":"value2","prop1":28,"graph":[...]}"
}
所以我的问题:
- 假定由于类型
"JSON"
< ->"STRING"
,身体不匹配吗? - 这是对模型服务器的错误解释,还是OKHTTP生成错误的请求?(请求本身确实有效)
- 有什么建议如何解决此问题?
这是一个JSON演示:
@Test
public void testRemote3() {
String host = "localhost";
int port = 1080;
String url = String.format("http://%s:%d",host,port);
MockServerClient mockServerClient = new MockServerClient(host,port);
mockServerClient.when(
request()
.withMethod("POST")
.withPath("/order/completed/notify")
.withBody(new JsonBody("{"username":"foo1", "age": 13}", Charset.forName("UTF-8"),MatchType.STRICT))
).respond(
response().withStatusCode(200)
.withCookie("sessionId", "2By8LOhBmaW5nZXJwcmludCIlMDAzMW")
.withHeader("Location", "https://www.mock-server.com")
.withBody("{"username":"wang", "status": 1}")
);
mockServerClient.when(
request()
.withMethod("POST")
.withPath("/order/completed/notify")
.withBody(new JsonBody("{"username":"zhao", "age": 3}", Charset.forName("UTF-8"),MatchType.STRICT))
).respond(
response().withStatusCode(200)
.withCookie("sessionId", "2By8LOhBmaW5nZXJwcmludCIlMDAzMW")
.withHeader("Location", "https://www.mock-server.com")
.withBody("{"username":"wang", "status": true}")
);
log.info("----------------->calling ");
Map<String,Object> userInfo = new HashMap<>();
userInfo.put("age",13);
userInfo.put("username","foo1");
String result = OkHttpUtils.postJson(url+"/order/completed/notify",userInfo);
log.info(result);
Map<String,Object> fool = new HashMap<>();
fool.put("age",3);
fool.put("username","zhao");
result = OkHttpUtils.postJson(url+"/order/completed/notify",fool);
log.info(result);
}