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

Spring Boot测试中如何为单个用例禁用WireMock服务器?

解决单个测试停用WireMock的方案

有两种可靠的方法可以实现单个测试禁用WireMock且不影响其他测试,推荐优先使用第一种:

方法一:修改服务配置指向无效地址(推荐)

你的测试类中已经通过Mockito mock了ArticleServiceConfiguration,可以直接在目标测试方法中临时修改配置的服务地址为无效地址,让请求因无法连接抛出异常,模拟服务不可用场景,无需操作WireMock服务器。

步骤:

  1. 在测试类中注入mock的ArticleServiceConfiguration实例:
@Autowired
private ArticleServiceConfiguration articleServiceConfiguration;
  1. 修改目标测试方法的逻辑:
@Test
public void saveArticleWhenServerIsUnavailable() {
    // 临时将服务地址改为不存在的无效地址
    Mockito.when(articleServiceConfiguration.getUri()).thenReturn(URI.create("http://invalid-service:9999"));
    
    ArticleDto dto = new ArticleDto("Test Title", "Test Content", 1L);
    assertThrows(ServerUnavailableException.class, () -> articleService.saveArticle(dto));
    
    // 恢复原配置,避免影响其他测试
    Mockito.when(articleServiceConfiguration.getUri()).thenReturn(URI.create("http://article-service:8080"));
}

这种方法不会改变WireMock的运行状态,对其他测试完全无影响,是最安全的方案。

方法二:直接启停WireMock服务器

如果必须停用WireMock服务器本身,可以注入WireMockServer实例,在测试方法中手动控制启停,测试完成后恢复。

步骤:

  1. 在测试类中注入WireMockServer实例:
@Autowired
private WireMockServer wireMockServer;
  1. 修改目标测试方法的逻辑:
@Test
public void saveArticleWhenServerIsUnavailable() {
    // 停止WireMock服务器
    wireMockServer.stop();
    
    try {
        ArticleDto dto = new ArticleDto("Test Title", "Test Content", 1L);
        assertThrows(ServerUnavailableException.class, () -> articleService.saveArticle(dto));
    } finally {
        // 必须重启WireMock,确保后续测试正常运行
        wireMockServer.start();
    }
}

注意:这种方法需要确保在finally块中重启服务器,否则会导致后续所有依赖WireMock的测试失败。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 15:56:01