【问题标题】:SpringRunner vs SpringBootTestSpringRunner 与 SpringBootTest
【发布时间】:2020-03-13 00:56:17
【问题描述】:

在单元测试中,@Runwith(SpringRunner.class) & @SpringBootTest 有什么区别?

你能给我解释一下每一个的用例吗?

【问题讨论】:

  • 您阅读过各种文档吗?还有什么不清楚的地方?
  • 明显的区别是 Spring test vs Spring boot test,但这是一个非常广泛的问题
  • 我会明白除了 SpringRunner 之外什么时候应该使用 @SpringBootTest。
  • 从 JUnit 5 开始不再需要 RunWith,并且可以从您的单元测试代码中删除。

标签: java spring-boot junit spring-boot-test


【解决方案1】:

@RunWith(SpringRunner.class) :你需要这个注解才能在junit测试期间启用@Autowire@MockBean等spring boot特性

用于在 Spring Boot 测试功能和 JUnit 之间架起一座桥梁。每当我们在 JUnit 测试中使用任何 Spring Boot 测试功能时,都需要此注解。

@SpringBootTest : 该注解用于加载完整的应用程序上下文以进行端到端集成测试

当我们需要引导整个容器时,可以使用@SpringBootTest 注解。注释通过创建将在我们的测试中使用的 ApplicationContext 起作用。

这篇文章在这两种情况下都有清晰的例子Baeldung

【讨论】:

    【解决方案2】:

    @RunWith 是来自 JUnit 4 的旧注释,用于使用测试运行器。如果你使用的是 JUnit 5 (Jupiter),你应该使用 @ExtendWith 来使用 JUnit 扩展

    https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-testing

    "如果您使用的是 JUnit 4,请不要忘记在您的测试中也添加 @RunWith(SpringRunner.class),否则注释将被忽略。如果您使用的是 JUnit 5,则无需添加等效项@ExtendWith(SpringExtension.class) as @SpringBootTest 和其他 @…Test 注解已经用它注解了。

    【讨论】:

    • 当我转换为 JUnit 5 时,我刚刚删除了 RunWith 注释。似乎没有必要使用 ExtendWith ,因为您在 Spring 文档中的引用表明了这一点。
    【解决方案3】:

    来自spring.io

    @RunWith(SpringRunner.class) 告诉 JUnit 使用 Spring 的测试运行 支持。 SpringRunnerSpringJUnit4ClassRunner 的新名称, 只是在眼睛上更容易一些。

    @SpringBootTest 表示“支持 Spring Boot 的引导”(例如 加载 application.properties 并给我所有的 Spring Boot 优点)

    因此,如果您不需要 Spring Boot 为集成测试加载的所有内容,则可能不需要 @SpringBootTest

    【讨论】:

      猜你喜欢
      • 2018-02-07
      • 1970-01-01
      • 2022-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-16
      • 1970-01-01
      • 2018-04-09
      相关资源
      最近更新 更多