关于java:Mockito使用JUnit 5两次注入模拟

Mockito injects mocks twice with JUnit 5

我开始测试Spring Boot 2.0.0,并且在Mockito 2.17.0和JUnit 5.1.0中遇到了奇怪的行为。

据我所知,将模拟注入所需的bean的方法是对MockitoExtension类使用新的@ExtendWith批注。

所以,这是我的测试课:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@ExtendWith(MockitoExtension.class)
class MyServiceTest {

    @Mock
    private A a;

    @Mock
    private B b;

    @InjectMocks
    private MyService myService;

    // The test methods are omitted
}

看起来还不错,但是我发现未按预期调用模拟程序,并且我发现这是由于测试类和服务本身内部的ab实例不同。

实际上,这是因为MockitoExtension被应用了两次,并且第二次应用了它,所以myService字段没有被评估为null(显然),这暗示着新创建的模拟(a)既不设置为当前myService实例,也不设置为新实例。

我忘记了什么吗?

我认为自己可以自己处理模拟,但我认为这不是InjectMocks注释的目的。

感谢您的时间。


您似乎遇到了Mockito问题:嘲笑#1346。

它已经修复,因此您可以等待公开发布或使用开发版本2.17.2:https://bintray.com/mockito/maven/mockito-development/2.17.2(发行说明)