何时使用 @RunWith 和 @ExtendWith?

96

我的团队和我一直在使用Spring Boot开发一些微服务。自从我们升级到JUnit 5和Spring Boot 2后,不同的开发人员用不同的方式实现了JUnit的以下两个注解:

  • @ExtendWith
  • @RunWith

今天,这两者有何区别?我们是否真的需要它们来进行单元测试,还是它们被嵌入到一些新的Spring Boot注解中了呢?

4个回答

133
如果您使用的是Junit版本< 5,则必须使用@RunWith(SpringRunner.class)@RunWith(MockitoJUnitRunner.class)等。
如果您使用的是Junit版本= 5,则必须使用@ExtendWith(SpringExtension.class)@ExtendWith(MockitoExtension.class)等。
以下是一些有用的链接:
  1. SpringRunner
  2. MockitoJUnitRunner
  3. SpringExtension
  4. MockitoExtension

47
答案可以在文档中找到:

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

.


15

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


5
< p >使用@ExtendWith引入的一个重要区别是它可以接收一个扩展数组,允许在同一个测试中使用多个扩展。像这样的事情可以做到:< /p>
@ExtendWith({MockitoExtension.class, LogAsserterExtension.class})
class MyTest

在JUnit 4中,由于使用@RunWith注解只允许一个Runner类,因此当您想在测试中同时使用Mockito和Params时,可能会遇到问题,因为您不能同时使用MockitoJUnitRunnerJUnitParamsRunner


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接