1. 概述

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

在这篇教程中,我们将一起学习它们的使用方法,并了解它们之间的异同。

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

SpringBootTestSpringRunner 的替代方案,适用于 JUnit5。它也用于执行集成测试并加载Spring测试上下文。

它功能强大,提供了丰富的配置选项,支持如MOCKRANDOM_PORTDEFINED_PORTNONE等多种Web环境模式。我们可以通过注解传递应用属性,这些属性会在测试运行前注入到Spring环境中:

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

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

在类级别上使用 @SpringBootTest 标记来运行集成测试。

4. SpringRunnerSpringBootTest 对比

下表列出了两者的优缺点。

SpringRunner SpringBootTest
执行集成测试,加载Spring测试上下文 执行集成测试,加载Spring测试上下文
支持JUnit注解 支持JUnit注解
需要Junit 4.12或更高 需要Junit 5或更高
配置API不丰富 提供丰富的配置选项
不推荐 推荐,因为它支持新特性且易于使用

5. 总结

在这篇文章中,我们了解了 SpringRunnerSpringBootTest 的用法。我们比较了它们的差异和相似之处。建议使用 SpringBootTest,因为它支持最新的 JUnit,但在需要使用 JUnit 4 的情况下,SpringRunner 是一个选择。