如何在 JUnit5 中使用 Mockito

新手上路,请多包涵

如何在 Mockito 和 JUnit 5 中使用注入?

在 JUnit4 中,我可以只使用 @RunWith(MockitoJUnitRunner.class) 注释。在JUnit5中是没有 @RunWith 注解?

原文由 Daniel Käfer 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

有多种使用 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:

 @ExtendWith(MockitoExtension.class)
public class ExampleTest {

    @Mock
    private List list;

    @Test
    public void shouldDoSomething() {
        list.add(100);
    }

}

MockitoExtension 文档 描述了实例化模拟的其他方法,例如使用构造函数注入(如果您在测试类中引用 final 字段)。

没有规则,没有跑步者

JUnit 4 规则和运行器在 JUnit 5 中不起作用,因此不能使用 MockitoRuleMockito 运行 器。

原文由 Nicolai Parlog 发布,翻译遵循 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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题