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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:57:48