WireMock验证报错VerificationException:未匹配请求的问题咨询
问题根源分析
你遇到的问题很典型——你的测试代码只完成了WireMock Stub的定义,但完全没有发起任何针对这个Stub接口的HTTP请求。WireMock的verify方法是用来校验实际收到的请求是否符合预期,而你现在根本没发请求,所以它自然会报错说"Requests received: [ ]"。另外还有两个小问题需要修正:
- 你在Stub里连续写了两个
willReturn,后面的会直接覆盖前面的响应配置,这会导致你预期的"Login Success"响应根本不会生效; verify里用urlPathEqualTo的时候,不需要写完整的http://localhost:8080/login,只需要写路径/login即可,WireMock会自动匹配当前服务的根地址。
修正后的完整代码
我用Java 11自带的HttpClient来发起请求,你也可以用Apache HttpClient、RestTemplate等其他工具,效果是一样的:
import org.junit.Rule; import org.junit.Test; import com.github.tomakehurst.wiremock.junit.WireMockRule; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import static com.github.tomakehurst.wiremock.client.WireMock.*; public class MockTestDemo { private static final int WIREMOCK_PORT = 8080; @Rule public WireMockRule wireMockRule = new WireMockRule(WIREMOCK_PORT); @Test public void exampleTest() throws Exception { // 1. 定义Stub:修正重复willReturn的问题,只保留一个正确的响应配置 stubFor(get(urlEqualTo("/login")) .withHeader("Accept", equalTo("application/json")) .willReturn(okJson("{ \"message\": \"Hello\" }") .withStatusMessage("Everything was just fine!"))); // 2. 关键步骤:发起实际的HTTP请求到WireMock Stub接口 HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("http://localhost:" + WIREMOCK_PORT + "/login")) .header("Accept", "application/json") .header("Content-Type", "application/json") // 和verify里的header匹配 .GET() .build(); HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); // 3. 修正verify的路径,只写相对路径,并确保header和请求一致 verify(getRequestedFor(urlPathEqualTo("/login")) .withHeader("Content-Type", equalTo("application/json"))); } }
关键改动说明
- 添加HTTP请求:这是解决verify失败的核心,只有实际发送了请求,WireMock才会记录请求日志,verify才能校验;
- 修复Stub的响应配置:去掉重复的
willReturn,如果需要同时设置状态码、响应体和状态消息,可以链式调用(比如okJson()已经默认设置200状态码,不需要再单独withStatus(200)); - 修正verify的URL路径:
urlPathEqualTo接收的是相对路径,不是完整URL,避免出现错误的匹配路径"localhosturl/login"。
现在运行这个测试,应该就能正常通过了——既会触发Stub的响应,也能通过verify校验请求是否符合预期。
内容的提问来源于stack exchange,提问作者NarendraR
相关产品推荐
相关产品推荐

