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

