如何在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
相关产品推荐
相关产品推荐

