SpringRunner 是否应该在 Spring Boot 中与 Junit 5 一起使用

sat*_*the 14 java spring spring-boot

我对 SpringRunner 类感到困惑。\n来自 Stackoverflow 和 google 确实理解了这一点SpringRunner并且SpringJunit4ClassRunner它们是一回事。

\n\n
@RunWith(SpringRunner.class)\n
Run Code Online (Sandbox Code Playgroud)\n\n

我对这门课的理解是:

\n\n
    \n
  • 顾名思义,它是一个“运行程序”(它将运行 Junit 测试)
  • \n
  • 在使用注释执行单元测试时使用此类@RunWith
  • \n
  • 此注释有助于加载 spring 应用程序上下文并帮助 \xe2\x80\x98autowire\xe2\x80\x99 依赖项。
  • \n
  • 仅当我们需要 spring 上下文 bean 依赖项时才应使用此类。
  • \n
  • 所以这个类应该谨慎使用,否则我们将在测试过程中不必要地加载 spring 上下文。
  • \n
  • 此类帮助 Junit 和 Spring 协作。
  • \n
\n\n

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

\n\n

如果是的话,我们应该在 Spring Boot 和 Junit5 环境中使用什么?

\n

R.G*_*R.G 14

从参考文档

\n\n
\n

如果您使用的是 JUnit 4,请不要忘记在测试中添加 @RunWith(SpringRunner.class),否则注释将被忽略。如果您使用的是 JUnit 5,\xe2\x80\x99s 无需添加\n 等效的 @ExtendWith(SpringExtension.class) 作为 @SpringBootTest,\n 其他 @\xe2\x80\xa6Test 注释已用它注释。

\n
\n


Mar*_*arc 8

有了 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>
Run Code Online (Sandbox Code Playgroud)


Han*_*tsy 5

@RunWith是一个 JUnit4 API。

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

@SpringJunitConfig(classes= config classes)
public class ASpringTest
{}
Run Code Online (Sandbox Code Playgroud)

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

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

  • 注意:它是来自包“org.springframework.test.context.junit.jupiter”的“SpringJUnitConfig”(大写U) (2认同)