Wiremock 请求与 anyRequestedFor(anyUrl()) ==== 更新 ====

问题描述

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

  @Rule public wiremockRule wiremockRule = new wiremockRule(12345);

这是测试用例:

  @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" ]
    }
  }
} ]

==== 更新 ====

我想我明白了。我正在对由消息(发布/订阅)触发的异步进程的行为进行功能测试。 Processor 界面是这样的:

public interface MessageProcessor<T> {
    void process(ReceivedMessage<T> message);
}

问题是我没有调用 process 方法并测试行为。相反,我向内存中的消息队列发布了一条消息,并异步触发了 void process(ReceivedMessage<T> message);。我猜当调用 verify() 方法时,process() 中的传出 http 调用尚未发生。但是当wiremock生成失败报告时,它已经发生了,所以它显示在失败报告中。

我在测试中直接切换到调用process()后,通过了。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)