【问题标题】:Should SpringRunner be used in Spring Boot with Junit 5SpringRunner 是否应该在带有 Junit 5 的 Spring Boot 中使用
【发布时间】:2020-06-07 16:13:40
【问题描述】:

我对 SpringRunner 类感到困惑。 从 Stackoverflow 和 google 确实了解到 SpringRunnerSpringJunit4ClassRunner 是一回事。

@RunWith(SpringRunner.class)

我对这门课的理解是:

  • 顾名思义 - 它是一个“跑步者”(它将运行 Junit 测试)
  • 在使用注释@RunWith 执行单元测试时使用此类
  • 此注解有助于加载 Spring 应用程序上下文并有助于“自动装配”依赖项。
  • 只有在我们需要 spring 上下文 bean 依赖项时才应该使用这个类。
  • 因此应谨慎使用此类,否则我们将在测试期间不必要地加载弹簧上下文。
  • 本课程帮助 Junit 和 Spring 协同工作。

有了 Junit5 和 spring boot 这个类就不再需要了吗?

如果是,那么我们应该在 spring boot 和 Junit5 环境中使用什么?

【问题讨论】:

    标签: java spring spring-boot


    【解决方案1】:

    来自参考document

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

    【讨论】:

      【解决方案2】:

      有了 Junit5 和 spring boot 这个类就不再需要了吗?

      注解@RunWith(SpringRunner.class)不再需要,可以删除。

      另外,如果只使用Junit5,建议排除Junit4:

      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-test</artifactId>
         <scope>test</scope>
         <exclusions>
            <exclusion>
               <groupId>org.junit.vintage</groupId>
               <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
         </exclusions>
      </dependency>
      

      【讨论】:

        【解决方案3】:

        @RunWith 是一个 JUnit4 API。

        在 JUnit 5 中,请改用 @ExtendedWith。 Spring core 为它提供了一个新的 SpringExtension。 还有一些更灵活的注释可用,例如。 SpringJunitConfig

        @SpringJunitConfig(classes= config classes)
        public class ASpringTest
        {}
        

        关于 SpringJunitConfig 的使用,请查看here的更多示例。

        在最新的 Spring Boot 2.4 中,JUnit 5 是默认的测试运行器,使用 @SpringBootTest 就足够了,而且 Spring Boot 还为 Spring Data 提供了测试切片能力,查看我的示例 here

        【讨论】:

        • 注意:它是 SpringJUnitConfig(大写 U),来自包 org.springframework.test.context.junit.jupiter
        猜你喜欢
        • 1970-01-01
        • 2019-03-25
        • 2019-03-22
        • 1970-01-01
        • 2016-06-13
        • 2019-09-07
        • 1970-01-01
        • 2019-05-21
        • 1970-01-01
        相关资源
        最近更新 更多