1. 概述
无论单元测试还是集成测试,测试对于任何应用都至关重要。SpringRunner
和 SpringBootTest
类是进行集成测试的基础。
在这篇教程中,我们将一起学习它们的使用方法,并了解它们之间的异同。
2. SpringRunner
SpringRunner
是 [SpringJUnit4ClassRunner](/junit-springrunner-vs-mockitojunitrunner#springrunner)
的别名,适用于基于 JUnit4 的测试类。它通过加载 Spring 测试上下文,使得Spring Bean 和配置在使用JUnit注解时可用。使用此功能需要Junit 4.12或更高版本。
在代码中使用 SpringRunner
,只需在测试类上添加 @RunWith(SpringRunner.class)
注解:
@RunWith(SpringRunner.class)
public class SampleIntegrationTest {
@Test
public void test() {
//
}
}
3. SpringBootTest
SpringBootTest
是 SpringRunner
的替代方案,适用于 JUnit5。它也用于执行集成测试并加载Spring测试上下文。
它功能强大,提供了丰富的配置选项,支持如MOCK
、RANDOM_PORT
、DEFINED_PORT
和NONE
等多种Web环境模式。我们可以通过注解传递应用属性,这些属性会在测试运行前注入到Spring环境中:
@SpringBootTest(
properties = {"user.name=test_user"},
webEnvironment = MOCK)
public class SampleIntegrationTest {
@Test
public void test() {
//
}
}
在类级别上使用 @SpringBootTest
标记来运行集成测试。
4. SpringRunner
与 SpringBootTest
对比
下表列出了两者的优缺点。
SpringRunner |
SpringBootTest |
---|---|
执行集成测试,加载Spring测试上下文 | 执行集成测试,加载Spring测试上下文 |
支持JUnit注解 | 支持JUnit注解 |
需要Junit 4.12或更高 | 需要Junit 5或更高 |
配置API不丰富 | 提供丰富的配置选项 |
不推荐 | 推荐,因为它支持新特性且易于使用 |
5. 总结
在这篇文章中,我们了解了 SpringRunner
和 SpringBootTest
的用法。我们比较了它们的差异和相似之处。建议使用 SpringBootTest
,因为它支持最新的 JUnit,但在需要使用 JUnit 4 的情况下,SpringRunner
是一个选择。