如何在各测试用例中指定使用的WireMock Stub JSON文件?
实现方案
1. 先关闭WireMock的自动存根加载
不管你用JUnit规则还是直接实例化WireMockServer,核心是禁用默认的mappings目录自动加载功能:
JUnit 5 搭配WireMockExtension的场景
注册扩展时添加disableMappingsLoading()配置:
@RegisterExtension static WireMockExtension wireMock = WireMockExtension.newInstance() .options(wireMockConfig() .disableMappingsLoading() // 关键:阻止自动读取mappings目录 .port(8080)) .build();
JUnit 4 搭配WireMockRule的场景
在规则配置里加入同样的开关:
@Rule public WireMockRule wireMockRule = new WireMockRule(wireMockConfig() .disableMappingsLoading() .port(8080));
直接使用WireMockServer实例
手动创建服务器时带上该配置:
WireMockServer wireMockServer = new WireMockServer(wireMockConfig() .disableMappingsLoading() .port(8080)); wireMockServer.start();
2. 每个测试用例手动加载指定存根
关闭自动加载后,就可以在单个测试里按需加载存根文件:
加载单个存根文件
调用loadMappingsFromFile()方法,传入目标存根的文件路径:
@Test void testPaymentSuccess() { // 仅加载当前测试需要的存根 wireMock.loadMappingsFromFile("src/test/resources/mappings/payment-success.json"); // 编写你的测试逻辑... }
加载多个存根文件
可以多次调用单个文件加载方法,或者把相关存根放到同一子目录,用loadMappingsFromDirectory()加载整个指定目录:
@Test void testUserOperations() { // 加载用户服务相关的所有存根 wireMock.loadMappingsFromDirectory("src/test/resources/mappings/user-service"); // 执行测试逻辑... }
3. 测试后清理存根(避免跨用例干扰)
为了防止不同测试的存根互相影响,建议在每个测试结束后清空所有存根配置:
@AfterEach void cleanUp() { wireMock.resetAllMappings(); // 清空已加载的所有存根 }
针对WireMock独立服务器的场景
启动服务器时添加--disable-mappings-loading参数,关闭自动加载:
java -jar wiremock-jre8-standalone.jar --disable-mappings-loading --port 8080
然后在测试中通过Admin API手动上传存根,比如用curl:
curl -X POST --data-binary @src/test/resources/mappings/login-success.json http://localhost:8080/__admin/mappings
或者在代码里用AdminClient操作:
WireMockAdminClient adminClient = new WireMockAdminClient("localhost", 8080); adminClient.loadMappingsFromFile(new File("src/test/resources/mappings/login-success.json"));
内容的提问来源于stack exchange,提问作者kcon123
相关产品推荐
相关产品推荐

