Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Junit Wiremock请求与anyRequestedFor(anyUrl())不匹配_Junit_Wiremock - Fatal编程技术网

Junit Wiremock请求与anyRequestedFor(anyUrl())不匹配

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

我有一个java服务,使用JUnit4.x作为测试框架。我在测试文件中使用junit@规则,如下所示:

  @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我想我已经找到了答案。让我更新我的问题