问题描述
wiremockServer.stubFor(post(urlEqualTo("/testpost"))
.willReturn(onIncomingRequest()));
像这样,所以每次使用这个存根时 sever 都会调用 onIncomingRequest。
解决方法
(最)正确的方法是实现 PostServeAction
。详情请参阅 this documentation page 和 WireMock's test cases。
您可以通过编写自定义响应转换器来实现您想要的行为。响应转换器将查询 WireMock 的请求管理端点以检索最近的请求,并解析该数据以形成响应。
伪代码:
public class LastRequestBody extends ResponseTransformer {
public String getName() {
return "LastRequestBody";
}
@Override
public Response transform(Request request,Response response,FileSource files,Parameters parameters) {
// Set up some client
String wmRequests = "http://127.0.0.1:8080/__admin/requests" // update to whatever your WM base url is
OkHttpClient client = new OkHttpClient();
String url = HttpUrl.parse().newBuilder().build().toString();
okhttp3.Response okhttpResponse = client.newCall(okHttpRequest).execute();
// Parse WM response into JSON
JSONParser parser = new JSONParser();
JSONObject responseObj = (JSONObject) parser.parse(okhttpResponse.body().string());
JSONArray requests = (JSONArray) responseObj.get("requests");
JSONObject mostRecentRequest = (JSONObject) requests[0];
String mostRecentRequestBody = mostRecentRequest.get("request").get("body").toString();
// Return response that looks like the original request/response
return Response.Builder.like(response).but().body(mostRecentRequestBody.toJSONString()).build();
}
}
以上代码可能不是 100% 正确,但轮廓应该足够扎实。
查看 WM 管理页面,了解有关查询 all requests. 的更多信息 (其他假设 - 我使用 JSONSimple 进行解析,使用 OkHttp3 向 WM 发出请求)