【问题标题】:How to mock application configuration or context for @springboottest?如何模拟@springboottest 的应用程序配置或上下文?
【发布时间】:2026-02-07 09:20:11
【问题描述】:

我有一个需要外部连接(数据库、配置服务器、分析服务器)才能启动的应用。

当我运行“@springboottest”时,我不想连接到真实的 url,因此应用程序无法启动以进行测试。解决问题的最佳方法是什么?

有没有办法在应用启动之前提供模拟?

【问题讨论】:

    标签: java spring-boot-test


    【解决方案1】:

    @MockBean 是您正在寻找的。它用于用 Mockito mock 替换 bean。 docs 的一个例子是:

    @SpringBootTest
    class MyTests {
    
        @Autowired
        private Reverser reverser;
    
        @MockBean
        private RemoteService remoteService;
    
        @Test
        void exampleTest() {
            given(this.remoteService.getValue()).willReturn("spring");
            String reverse = this.reverser.getReverseValue(); // Calls injected RemoteService
            assertThat(reverse).isEqualTo("gnirps");
        }
    
    }
    

    同样使用@SpringBootTest,默认情况下无需进一步配置将加载应用程序中定义的所有bean,这可能对测试来说太多了,因为通常我们只专注于在每个测试中测试一个东西。

    因此,如果您不测试控制器层或数据层,很可能您可以将您的测试重写为普通的 Mockito 测试,而无需使用@SpringBootTest。它更简单,运行速度也更快。

    如需测试控制器层或数据层,请查看@WebMvcTest@DataJpaTest@JdbcTest @DataJdbcTest等(详见docs

    【讨论】:

      最近更新 更多