You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WireMock遇到请求未匹配时使测试用例失败

解决WireMock请求不匹配时测试仍通过的问题

环境信息

  • WireMock版本:2.24.1
  • Java版本:21
  • 依赖配置:
<dependency>
    <groupId>com.github.tomakehurst</groupId>
    <artifactId>wiremock</artifactId>
    <version>2.24.1</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-contract-wiremock</artifactId>
    <version>1.2.4.RELEASE</version>
</dependency>

问题

请求因配置错误未匹配任何存根时,系统内置弹性机制会忽略该错误,导致测试用例仍通过。需配置WireMock,让此类场景下特定测试用例失败。

解决方案

1. 启用严格匹配模式

初始化WireMock服务器时开启严格匹配,无匹配存根时返回404,结合测试断言即可触发失败。

独立WireMock服务器示例:

WireMockServer wireMockServer = new WireMockServer(
    wireMockConfig().port(8080).strictMatching()
);
wireMockServer.start();

Spring Cloud Contract WireMock示例:
在测试类中通过配置属性启用:

@AutoConfigureWireMock(port = 8080, stubs = "classpath:/stubs")
@TestPropertySource(properties = {
    "wiremock.strict-matching=true"
})
public class YourTestClass {
    // 测试逻辑
}

2. 监听未匹配请求并抛出异常

通过请求监听器捕获404响应(排除无关请求如favicon),直接抛出RuntimeException终止测试。

示例代码:

wireMockServer.addMockServiceRequestListener((request, response) -> {
    if (response.getStatus() == 404 && !request.getUrl().equals("/favicon.ico")) {
        throw new RuntimeException("请求未匹配到任何存根:" + request.getUrl());
    }
});

3. 断言存根请求计数

测试结束后,通过verify方法断言目标存根的请求次数至少为1,未匹配时会抛出VerificationException导致测试失败。

示例代码:

verify(postRequestedFor(urlEqualTo("/your-api-path"))
    .withHeader("Content-Type", equalTo("application/json")));

内容的提问来源于stack exchange,提问作者neverthoughtitwouldwork

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 17:02:37