如何在 Mockito 和 JUnit 5 中使用注入?
在 JUnit4 中,我可以只使用 @RunWith(MockitoJUnitRunner.class)
注释。在JUnit5中是没有 @RunWith
注解?
原文由 Daniel Käfer 发布,翻译遵循 CC BY-SA 4.0 许可协议
如何在 Mockito 和 JUnit 5 中使用注入?
在 JUnit4 中,我可以只使用 @RunWith(MockitoJUnitRunner.class)
注释。在JUnit5中是没有 @RunWith
注解?
原文由 Daniel Käfer 发布,翻译遵循 CC BY-SA 4.0 许可协议
使用 Mockito 的 MockitoExtension
。该扩展包含在一个新的工件中 mockito-junit-jupiter
:
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<version>4.5.1</version>
<scope>test</scope>
</dependency>
它允许您像使用 JUnit 4 一样编写测试:
import org.mockito.junit.jupiter.MockitoExtension;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
@ExtendWith(MockitoExtension.class)
class MyTest {
@Mock
private Foo foo;
@InjectMocks
private Bar bar; // constructor injection
...
}
原文由 Jonathan 发布,翻译遵循 CC BY-SA 4.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
有多种使用 Mockito 的方法——我将一一介绍。
手动
使用
Mockito::mock
手动创建模拟,无论 JUnit 版本(或测试框架)如何。基于注释
使用 @Mock -annotation 和对
MockitoAnnotations::initMocks
的相应调用来 创建 模拟工作,无论 JUnit 版本如何(或测试框架,但 Java 9 可能会干扰这里,这取决于测试代码是否最终在模块与否)。模拟扩展
JUnit 5 有 一个强大的扩展模型,Mockito 最近在组/工件 ID org.mockito 下发布了一个: mockito-junit-jupiter 。
您可以通过将
@ExtendWith(MockitoExtension.class)
添加到测试类并使用@Mock
注释模拟字段来应用扩展。来自MockitoExtension
的 JavaDoc:MockitoExtension 文档 描述了实例化模拟的其他方法,例如使用构造函数注入(如果您在测试类中引用 final 字段)。
没有规则,没有跑步者
JUnit 4 规则和运行器在 JUnit 5 中不起作用,因此不能使用
MockitoRule
和 Mockito 运行 器。