如何模拟@springboottest 的应用程序配置或上下文?
Posted
技术标签:
【中文标题】如何模拟@springboottest 的应用程序配置或上下文?【英文标题】:How to mock application configuration or context for @springboottest? 【发布时间】:2022-01-23 03:20:15 【问题描述】:我有一个需要外部连接(数据库、配置服务器、分析服务器)才能启动的应用。
当我运行“@springboottest”时,我不想连接到真实的 url,因此应用程序无法启动以进行测试。解决问题的最佳方法是什么?
有没有办法在应用启动之前提供模拟?
【问题讨论】:
【参考方案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)
【讨论】:
以上是关于如何模拟@springboottest 的应用程序配置或上下文?的主要内容,如果未能解决你的问题,请参考以下文章
SpringBootTest - 如何在测试级别断言上下文不加载和更改属性?
使用@SpringBootTest时如何在测试类中自动装配bean
如何在 SpringBootTest 中的 @DataJpaTest 中导入配置类?
如何使用@SpringBootTest 验证作业是不是运行了另一个作业