如何将 Mockito 与 JUnit5 一起使用
2022-08-31 06:39:37
						如何将注入与 Mockito 和 JUnit 5 一起使用?
在JUnit4中,我只能使用Prosnote。在JUnit5中没有注释吗?@RunWith(MockitoJUnitRunner.class)@RunWith
如何将注入与 Mockito 和 JUnit 5 一起使用?
在JUnit4中,我只能使用Prosnote。在JUnit5中没有注释吗?@RunWith(MockitoJUnitRunner.class)@RunWith
有不同的方法可以使用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 中不起作用,因此不能使用 MockitoRule 和 Mockito 运行器。
使用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
    ...
}