@ExtendWith(SpringExtension.class) 和 @ExtendWith(MockitoExtension.class) 有啥区别?
Posted
技术标签:
【中文标题】@ExtendWith(SpringExtension.class) 和 @ExtendWith(MockitoExtension.class) 有啥区别?【英文标题】:What is the difference between @ExtendWith(SpringExtension.class) and @ExtendWith(MockitoExtension.class)?@ExtendWith(SpringExtension.class) 和 @ExtendWith(MockitoExtension.class) 有什么区别? 【发布时间】:2020-06-04 02:35:56 【问题描述】:我使用 @RunWith(MockitoJUnitRunner.class)
进行带有 mockito 的 junit 测试。但现在我正在使用 spring-boot 和 JUnit 5。
这两个注释有什么区别?
我可以只使用@ExtendWith(SpringExtension.class)
来模拟我的对象吗?
【问题讨论】:
【参考方案1】:涉及 Spring 时:
如果您想在测试中使用 Spring 测试框架功能,例如 @MockBean
,那么您必须使用 @ExtendWith(SpringExtension.class)
。它取代了已弃用的 JUnit4 @RunWith(SpringJUnit4ClassRunner.class)
不涉及 Spring 时:
如果你只是想涉及 Mockito 而不必涉及 Spring,例如,当你只想使用 @Mock
/ @InjectMocks
注释时,那么你想使用 @ExtendWith(MockitoExtension.class)
,因为它没有不要加载一堆不需要的 Spring 东西。它取代了已弃用的 JUnit4 @RunWith(MockitoJUnitRunner.class)
。
回答您的问题:
是的,您可以只使用 @ExtendWith(SpringExtension.class)
,但如果您的测试中不涉及 Spring 测试框架功能,那么您可能只想使用 @ExtendWith(MockitoExtension.class)
。
【讨论】:
以上是关于@ExtendWith(SpringExtension.class) 和 @ExtendWith(MockitoExtension.class) 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
@ExtendWith(SpringExtension.class) 不工作
未解决的参考:SpringExtension 使用 @ExtendWith 注释
Spring JUnit 5 ExtendWith TestContainer
如何修复类型不匹配:@ExtendWith(SpringExtension::class) Class -> Class in intellij?
无法在使用 @ExtendWith(SpringExtension.class) 运行的 Spring Boot 单元测试中注入应用程序上下文