我在用testng v7.0.0的Cucumber中配置WireMockServer时遇到问题(我认为这里无关紧要)。我想调用我自己的服务,该服务本身要求我定义的url

当我尝试这样调用时:

@When("the service is called")
public void theServiceIsCalled() {
    wireMockServer = new WireMockServer(options().port(PORT_NUMBER));
    wireMockServer.start();
    configureFor("127.0.0.1", wireMockServer.port());
    stubFor(get(urlEqualTo(url))
                .willReturn(aResponse()
                        .withStatus(HTTPOK)
                        .withHeader("Content-Type", "application/json")
                        .withBody(response)));
    myService.callService();
}


我总是


  java.util.concurrent.CompletionException:
  javax.ws.rs.ProcessingException:
  org.apache.http.conn.HttpHostConnectException:连接到
  127.0.0.1:9090 [/127.0.0.1]失败:连接被拒绝


我知道这不会是定义错误的porturl或标题的问题。我说这是因为,当我使用完全相同的WireMock配置运行Java实例(不进行服务调用),然后测试顺利运行时,该服务实际上返回了我所模拟的内容。看来WireMockServer的生存期必须位于我想要的进程之外的进程中。

这是怎么回事?

提前致谢 ;)

最佳答案

因此,似乎该问题是由于两个原因引起的:

1-我实际上并没有初始化wireMockServer(初始化是在BeforeAll方法中进行的,而实际上并没有被调用),对此感到抱歉。

2-stubFor必须用于wireMockServer实例。

以下是有效的配置:

WireMockServer server = new WireMockServer(options().bindAddress("127.0.0.1").port(port));
server.stubFor(get(urlEqualTo(urlWithId))
                .willReturn(aResponse()
                        .withStatus(HTTPOK)
                        .withHeader("Content-Type", "application/json")
                        .withBody(response)));
server.start()
myService.callService();


希望有人觉得这有用。

09-25 17:48