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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 04:22:10