如何将 Mockito 与 JUnit5 一起使用

2022-08-31 06:39:37

如何将注入与 Mockito 和 JUnit 5 一起使用?

在JUnit4中,我只能使用Prosnote。在JUnit5中没有注释吗?@RunWith(MockitoJUnitRunner.class)@RunWith


答案 1

有不同的方法可以使用Mockito - 我将逐一介绍它们。

手动地

使用 Mockito:::mock 手动创建模拟无论 JUnit 版本(或测试框架)如何都可以工作。

基于注释

使用@Mock注释和对 MockitoAnnotations::initMocks 的相应调用来创建模拟,无论 JUnit 版本如何(或测试框架,但 Java 9 可能会在这里干扰,这取决于测试代码是否最终出现在模块中)。

莫基托扩展

JUnit 5有一个强大的扩展模型,Mockito最近在组/artifact ID org.mockito下发布了一个:mockito-junit-jupiter

您可以通过向测试类添加并使用 对模拟字段进行注释来应用扩展。来自 的 JavaDoc:@ExtendWith(MockitoExtension.class)@MockMockitoExtension

@ExtendWith(MockitoExtension.class)
public class ExampleTest {

    @Mock
    private List list;

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

}

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

没有规则,没有跑步者

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


答案 2

使用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

    ...
}

推荐