何时使用@RunWith以及何时使用@ExtendWith

AR1*_*AR1 12 annotations junit4 spring-boot junit5

我的团队和我一直在使用Spring Boot开发大量微服务。由于服务是通过JUnit和Spring Boot升级进行的(我们现在使用的是Spring Boot 2和JUnit 5),因此由不同开发人员实现的不同JUnit现在在以下方面使用不同的模式:

  • @ExtendWith
  • @RunWith

今天,它们两者之间有什么区别?我们是否真的需要它们进行单元测试,或者将其嵌入一些新的Spring Boot注释中?

AR1*_*AR1 25

答案可以在文档中找到:

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

.


Tin*_*yOS 18

如果您使用的是Junit版本<5,则必须使用@RunWith(SpringRunner.class)@RunWith(MockitoJUnitRunner.class)等。

如果您使用的是Junit版本= 5,则必须使用@ExtendWith(SpringExtension.class)@ExtendWith(MockitoExtension.class)等。

  1. 奔跑者
  2. MockitoJUnitRunner
  3. SpringExtension
  4. Mockito扩展


Mur*_*nik 10

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


jes*_*ana 5

引入的一个重要区别@ExtendWith是它可以接收一系列扩展,允许在同一测试中使用其中的许多扩展。像这样的事情,可以做

@ExtendWith({MockitoExtension.class, LogAsserterExtension.class})
class MyTest
Run Code Online (Sandbox Code Playgroud)

早在 JUnit 4中@RunWith,只允许使用一个 Runner 类,例如,当您想在测试中使用 Mockito 和 Params 时就会遇到问题,因为您无法同时使用MockitoJUnitRunner和。JUnitParamsRunner