SpringRunner 和 @SpringBootTest
1、概览
无论是单元测试还是集成测试,测试对于任何应用程序都至关重要。SpringRunner
和 SpringBootTest
类是运行集成测试的基础。
在本教程中,我们将了解 SpringRunner
和 @SpringBootTest
的用法,以及它们之间的区别。
2、SpringRunner
SpringRunner
是 SpringJUnit4ClassRunner
类的别名,可用于基于 JUnit4 的测试类。它加载 Spring TestContext
,通过 Spring TestContext
,Spring Bean 和 Configuration 可与 JUnit 注解一起使用。需要 JUnit 4.12 或更高版本才能使用它。
通过 @RunWith(SpringRunner.class)
注解测试类来使用此功能:
@RunWith(SpringRunner.class)
public class SampleIntegrationTest {
@Test
public void test() {
//
}
}
3、SpringBootTest
SpringBootTest
是 SpringRunner
的替代品,可与 JUnit5 配合使用。它还用于运行集成测试和加载 Spring TestContext
。
它的功能非常丰富,可通过注解参数提供多种配置。它支持各种 Web 环境模式,如 MOCK
、RANDOM_PORT
、DEFINED_PORT
和 NONE
。我们可以通过注解传递 application properties,在测试运行之前将其注入到 Spring Environment 中。
@SpringBootTest(
properties = {"user.name=test_user"},
webEnvironment = MOCK)
public class SampleIntegrationTest {
@Test
public void test() {
//
}
}
要运行集成测试,必须在类级别添加注解 @SpringBootTest
。
4、SpringRunner
与 SpringBootTest
的比较
它们的区别如下表:
SpringRunner |
SpringBootTest |
---|---|
用于运行集成测试和加载 Spring TestContext | 用于运行集成测试和加载 Spring TestContext |
还可以使用 JUnit 注解 | 还可以使用 JUnit 注解 |
需要 JUnit4.12 或更高版本 | 需要 JUnit5 或更高版本 |
配置方面的 API 不丰富 | 提供丰富的 API 来配置测试配置 |
不推荐 | 推荐使用,因为它支持新功能,而且使用简单 |
5、总结
在本文中,我们学习了 SpringRunner
和 SpringBootTest
的用法,以及它们之间的区别。
如果你使用的是 Junit 4 那么你可以选择使用 SpringRunner
,否则都推荐使用 SpringBootTest
。
参考:https://www.baeldung.com/springrunner-vs-springboottest