我的团队和我一直在使用Spring Boot开发一些微服务。自从我们升级到JUnit 5和Spring Boot 2后,不同的开发人员用不同的方式实现了JUnit的以下两个注解:
- @ExtendWith
- @RunWith
今天,这两者有何区别?我们是否真的需要它们来进行单元测试,还是它们被嵌入到一些新的Spring Boot注解中了呢?
我的团队和我一直在使用Spring Boot开发一些微服务。自从我们升级到JUnit 5和Spring Boot 2后,不同的开发人员用不同的方式实现了JUnit的以下两个注解:
今天,这两者有何区别?我们是否真的需要它们来进行单元测试,还是它们被嵌入到一些新的Spring Boot注解中了呢?
@RunWith(SpringRunner.class)
或@RunWith(MockitoJUnitRunner.class)
等。@ExtendWith(SpringExtension.class)
或@ExtendWith(MockitoExtension.class)
等。如果您正在使用JUnit 4,请不要忘记将@RunWith(SpringRunner.class)添加到您的测试中,否则注释将被忽略。 如果您正在使用JUnit 5,则无需添加等效的@ExtendWith(SpringExtension.class),因为@SpringBootTest和其他@...Test注释已经用它注释过了。
.
@RunWith
是JUnit 4中使用测试运行器的旧注释。 如果您正在使用JUnit 5(Jupiter),则应使用@ExtendWith
来使用JUnit扩展。
@ExtendWith
引入的一个重要区别是它可以接收一个扩展数组,允许在同一个测试中使用多个扩展。像这样的事情可以做到:< /p>
@ExtendWith({MockitoExtension.class, LogAsserterExtension.class})
class MyTest
在JUnit 4中,由于使用@RunWith
注解只允许一个Runner类,因此当您想在测试中同时使用Mockito和Params时,可能会遇到问题,因为您不能同时使用MockitoJUnitRunner
和JUnitParamsRunner
。