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

WireMock无法从JSON文件读取响应问题排查求助

问题分析:WireMock无法读取JSON响应文件的原因及解决办法

嘿,我一眼就看到你代码里的关键问题了——你在测试方法里重新实例化了WireMockServer,这直接导致你的存根配置根本没生效!

核心问题:用错了WireMockServer实例

Spring已经通过WireMockContextInitializer帮你初始化了一个WireMockServer实例,并且通过@Autowired注入到了测试类里。但你在anything()测试方法里又手动new了一个:

wireMockServer = WireMockServer()

这就意味着你把存根配置到了一个完全没被测试用到的“孤儿”服务器上,真正处理请求的是Spring管理的那个服务器,它根本没有这个存根配置。所以不管你写的文件名对不对,甚至写个不存在的文件名,测试都能通过——因为这个存根本来就没被执行到!

快速解决步骤

1. 删除手动实例化的代码

直接用Spring注入的那个实例就行,把测试方法里的wireMockServer = WireMockServer()删掉:

@Test
fun anything() {
    // 移除这行错误代码
    wireMockServer.stubFor(post("/some-endpoint").willReturn(aResponse().withBodyFile("something.json")))
    // 继续你的请求测试逻辑
}

2. 确认JSON文件的存放路径

WireMock默认会从src/test/resources/__files目录读取响应文件,所以你得把something.json放在这个路径下。如果想自定义路径,可以通过WireMock的配置调整(不过Spring注入的话,你可以修改WireMockContextInitializer的配置来指定根目录)。

3. 验证存根是否生效

可以加一行代码确认存根是否被正确添加到Spring管理的服务器上:

@Test
fun anything() {
    wireMockServer.stubFor(post("/some-endpoint").willReturn(aResponse().withBodyFile("something.json")))
    // 打印存根数量,正常应该输出1
    println("当前存根数量:${wireMockServer.allStubMappings().size}")
    // 执行你的请求测试
}

额外提醒

  • 你在@AfterEach里的wireMockServer.resetAll()是正确的,它能清空每次测试后的存根,避免测试之间的干扰。
  • Spring的WireMockContextInitializer已经帮你把WebTestClient指向了WireMock的端口,所以不用额外配置端口信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 18:58:12