Junit Wiremock请求与anyRequestedFor(anyUrl())不匹配
我有一个java服务,使用JUnit4.x作为测试框架。我在测试文件中使用junit@规则,如下所示:Junit Wiremock请求与anyRequestedFor(anyUrl())不匹配,junit,wiremock,Junit,Wiremock,我有一个java服务,使用JUnit4.x作为测试框架。我在测试文件中使用junit@规则,如下所示: @Rule public WireMockRule wireMockRule = new WireMockRule(12345); public interface MessageProcessor<T> { void process(ReceivedMessage<T> message); } 这是测试用例: @Test public void
@Rule public WireMockRule wireMockRule = new WireMockRule(12345);
public interface MessageProcessor<T> {
void process(ReceivedMessage<T> message);
}
这是测试用例:
@Test
public void test() throws MessageException {
stubFor(get(urlPathEqualTo("/deal_catalog/v1/lookupId"))
.willReturn(aResponse().withBody(
"\"deal\": {" +
"\"id\": " + dealId.toString() +
"}"
)));
DoSomethingTriggersAHTTPCall();
WireMock.verify(anyRequestedFor(anyUrl()));
我试图用url路径验证请求,但一直失败。所以我决定测试最宽松的条件,但对我来说仍然失败。真的很绝望,有什么建议吗
Expected at least one request matching: {
"method" : "ANY"
}
Requests received: [ {
"url" : "/deal_catalog/v1/deals/lookupId?clientId=deal_catalog_team&inventoryProductId=3f4f32ff-80f6-40f9-8ae7-8a09ec3dafd2",
"absoluteUrl" : "http://localhost:12345/deal_catalog/v1/deals/lookupId?clientId=deal_catalog_team&inventoryProductId=3f4f32ff-80f6-40f9-8ae7-8a09ec3dafd2",
"method" : "GET",
"clientIp" : "127.0.0.1",
"headers" : {
"Connection" : "keep-alive",
"User-Agent" : "okhttp/3.13.1",
"Host" : "localhost:12345",
"Accept-Encoding" : "gzip"
},
"cookies" : { },
"browserProxyRequest" : false,
"loggedDate" : 1619815885486,
"bodyAsBase64" : "",
"body" : "",
"scheme" : "http",
"host" : "localhost",
"port" : 12345,
"loggedDateString" : "2021-04-30T20:51:25Z",
"queryParams" : {
"clientId" : {
"key" : "clientId",
"values" : [ "deal_catalog_team" ]
},
"inventoryProductId" : {
"key" : "inventoryProductId",
"values" : [ "3f4f32ff-80f6-40f9-8ae7-8a09ec3dafd2" ]
}
}
} ]
==更新====
我想我明白了。我正在对由消息(pub/sub)触发的异步进程的行为进行功能测试。处理器接口如下所示:
@Rule public WireMockRule wireMockRule = new WireMockRule(12345);
public interface MessageProcessor<T> {
void process(ReceivedMessage<T> message);
}
公共接口消息处理器{
作废处理(已接收消息消息);
}
问题是我没有调用process方法并测试行为。相反,我向内存中的消息队列发布了一条消息,该消息触发了void进程(ReceivedMessage消息)代码>异步。我猜当调用verify()
方法时,process()
中传出的http调用尚未发生。但是,当wiremock生成故障报告时,它已经发生了,因此故障报告中会显示它
在测试中直接切换到调用process()
后,它通过了。您确定创建的存根实际上与您的请求匹配吗?我发现您传递的URL有所不同。我对verify()
方法没有太多经验,但是如果没有匹配的请求(比如,WireMock不匹配任何请求),它可能无法正确显示@agoff我想我已经找到了答案。让我更新我的问题