WireMock能否指定固定自定义名称保存JSON格式的测试映射?
WireMock 保存固定名称映射或仅执行一次保存的解决方案
WireMock.saveAllMappings() 默认会生成带时间戳的文件名,导致每次运行测试都会创建新文件。要实现固定名称保存或仅执行一次保存,可以采用以下两种方案:
1. 指定固定文件名保存
直接使用 WireMock.saveMappingsTo() 方法手动指定输出路径和文件名,覆盖默认的自动命名逻辑,每次运行都会替换掉已有文件:
@Test public void hello() { stubFor(get(urlEqualTo("/hello")).willReturn(aResponse() .withStatus(200) .withBody("Hello!") )); // 提前确保目标目录存在 File mappingsDir = new File("./mappings"); if (!mappingsDir.exists()) { mappingsDir.mkdirs(); } // 指定固定文件路径,重复运行会覆盖旧文件 WireMock.saveMappingsTo(new File("./mappings/hello-fixed.json")); }
2. 仅执行一次保存
如果希望避免重复执行保存操作,可以通过两种方式控制:
- 判断文件是否存在:保存前检查目标文件是否已存在,不存在才执行保存
- 使用类级初始化方法:将保存逻辑放到
@BeforeClass(JUnit 4)或@BeforeAll(JUnit 5)中,仅在测试类启动时执行一次
示例:判断文件存在性
@Test public void hello() { stubFor(get(urlEqualTo("/hello")).willReturn(aResponse() .withStatus(200) .withBody("Hello!") )); File mappingFile = new File("./mappings/hello-fixed.json"); // 仅当文件不存在时执行保存 if (!mappingFile.exists()) { WireMock.saveMappingsTo(mappingFile); } }
示例:用类级初始化方法
@BeforeAll public static void setupAndSaveMappings() { WireMock.configureFor("localhost", 8080); // 根据你的WireMock服务配置调整 stubFor(get(urlEqualTo("/hello")).willReturn(aResponse() .withStatus(200) .withBody("Hello!") )); File mappingsDir = new File("./mappings"); if (!mappingsDir.exists()) { mappingsDir.mkdirs(); } WireMock.saveMappingsTo(new File("./mappings/hello-fixed.json")); } @Test public void hello() { // 此处仅执行测试逻辑,不再重复保存映射 }
内容的提问来源于stack exchange,提问作者Alexander Wang
相关产品推荐
相关产品推荐

