SpringRunner 和 @SpringBootTest

1、概览

无论是单元测试还是集成测试,测试对于任何应用程序都至关重要。SpringRunnerSpringBootTest 类是运行集成测试的基础。

在本教程中,我们将了解 SpringRunner@SpringBootTest 的用法,以及它们之间的区别。

2、SpringRunner

SpringRunnerSpringJUnit4ClassRunner 类的别名,可用于基于 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

SpringBootTestSpringRunner 的替代品,可与 JUnit5 配合使用。它还用于运行集成测试和加载 Spring TestContext

它的功能非常丰富,可通过注解参数提供多种配置。它支持各种 Web 环境模式,如 MOCKRANDOM_PORTDEFINED_PORTNONE。我们可以通过注解传递 application properties,在测试运行之前将其注入到 Spring Environment 中。

@SpringBootTest(
  properties = {"user.name=test_user"},
  webEnvironment = MOCK)
public class SampleIntegrationTest {

    @Test
    public void test() {
        //
    }
}

要运行集成测试,必须在类级别添加注解 @SpringBootTest

4、SpringRunnerSpringBootTest 的比较

它们的区别如下表:

SpringRunner SpringBootTest
用于运行集成测试和加载 Spring TestContext 用于运行集成测试和加载 Spring TestContext
还可以使用 JUnit 注解 还可以使用 JUnit 注解
需要 JUnit4.12 或更高版本 需要 JUnit5 或更高版本
配置方面的 API 不丰富 提供丰富的 API 来配置测试配置
不推荐 推荐使用,因为它支持新功能,而且使用简单

5、总结

在本文中,我们学习了 SpringRunnerSpringBootTest 的用法,以及它们之间的区别。

如果你使用的是 Junit 4 那么你可以选择使用 SpringRunner,否则都推荐使用 SpringBootTest


参考:https://www.baeldung.com/springrunner-vs-springboottest