使用wiremock时连接被拒绝

Posted

技术标签:

【中文标题】使用wiremock时连接被拒绝【英文标题】:Connection refused when using wiremock 【发布时间】:2019-12-28 18:22:55 【问题描述】:

我在 Junit 中有这段代码,我清楚地将端口设置为 8888

when(clientUtils.getLinkUrl(eq(HOSTELS_MICROSERVICE.name()), eq(HOSTELS_MICROSERVICE.name()), anyMap()))
                .thenReturn("http://localhost:8888/HOSTELS/HOSTELSMethods");

stubFor(com.github.tomakehurst.wiremock.client.WireMock.get("/HOSTELS/HOSTELS_LIST").willReturn(
                aResponse().withStatus(200)
                        .withHeader("Content-Type", APPLICATION_JSON_VALUE)
                        .withBody(ResourceUtils.getResourceFileAsString ("__files/HOSTELS.json"))));

但是当我运行测试时,我在这一行得到了这个错误:

stubFor(com.github.tomakehurst.wiremock.client.WireMock.get("/HOSTELS/HOSTELS_LIST").willReturn(..

和错误:

wiremock.org.apache.http.conn.HttpHostConnectException: Connect to localhost:8080 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused: connect

【问题讨论】:

【参考方案1】:

Java 用户

基于WireMock 文档。

在您的测试中使用 WireMock 有 3 种可能性:

    如果您使用 Wiremock 作为 JUnit 4 规则来配置端口使用:
import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.wireMockConfig;

...

@Rule
public WireMockRule wireMockRule = new WireMockRule(wireMockConfig().port(8888));
    如果您使用新实例并从您的测试类启动它(例如@Before):
import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options;

...

public class Test 

    WireMockServer wm;

    @BeforeEach
    void setUp() 
        wm = new WireMockServer(options().port(8888));
        wm.start();
    

    @Test
    void test() 
        wm.stubFor(...);
    

    使用默认实例的静态配置(在您的测试中不使用新实例):
WireMock.configureFor(8888);

对于 Kotlin 用户

如果您使用的是 kotlin,您可以将实际的wiremock 实例添加到stubForverify 调用,如wm.stubFor(),并像此答案的选项3 一样配置端口。

【讨论】:

嗯仍然:org.apache.http.conn.HttpHostConnectException:连接到 localhost:8080 [localhost/127.0.0.1] 失败:连接被拒绝(连接被拒绝)。单元 5 嗨@ses 我最近才发现这一点。我正在使用 Kotlin 和 JUnit 5,但遇到了 HttpHostConnectException 问题。我通过将实际的WireMockServer 实例添加到我的stubForverify 方法来解决它,即wireMockServer.stubFor()wireMockServer.verify()。完成此操作后,测试工作。希望对您有所帮助。 为了完整起见,值得一提的是,您可能还必须启动服务器。我选择了选项 2。使用 new WireMockServer(),但忘记致电 wm.start() 并得到 Connection refused

以上是关于使用wiremock时连接被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

难以使用Wiremock,微服务和外部https服务 - 没有捕获流量

springboot项目使用WireMock伪造REST服务

(07)使用WireMock快速伪造REST服务

(07)使用WireMock快速伪造REST服务

使用 MockServer 的 Wiremock 返回模拟的 http 响应时尝试更新嵌入式数据库

在春季启动测试中使用wiremock随机端口设置属性