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
class.
的新 @ExtendWith
注释
所以,这是我的测试 class:
@ExtendWith(MockitoExtension.class)
class MyServiceTest {
@Mock
private A a;
@Mock
private B b;
@InjectMocks
private MyService myService;
// The test methods are omitted
}
这看起来不错,但我发现模拟没有按预期被调用,我发现这是由于测试中 a
和 b
的不同实例 class 和服务本身。
实际上,这是因为 MockitoExtension
被应用了两次,第二次应用时,myService
字段未被评估为 null
(显然),这意味着新创建的模拟(a
和 b
)未设置为当前 myService
实例或新实例。
我是不是忘记了什么?
我想我可以自己处理模拟,但我认为这不是 InjectMocks
注释的目的。
感谢您的宝贵时间。
您似乎遇到了 Mockito 问题:mockito#1346。
它已经修复,所以您可以等待 public 发布或使用开发版本 2.17.2:https://bintray.com/mockito/maven/mockito-development/2.17.2 (release notes)
我开始测试 Spring Boot 2.0.0,我遇到了 Mockito 2.17.0 和 JUnit 5.1.0 的奇怪行为。
据我所知,将模拟注入所需 bean 的方法是使用带有 MockitoExtension
class.
@ExtendWith
注释
所以,这是我的测试 class:
@ExtendWith(MockitoExtension.class)
class MyServiceTest {
@Mock
private A a;
@Mock
private B b;
@InjectMocks
private MyService myService;
// The test methods are omitted
}
这看起来不错,但我发现模拟没有按预期被调用,我发现这是由于测试中 a
和 b
的不同实例 class 和服务本身。
实际上,这是因为 MockitoExtension
被应用了两次,第二次应用时,myService
字段未被评估为 null
(显然),这意味着新创建的模拟(a
和 b
)未设置为当前 myService
实例或新实例。
我是不是忘记了什么?
我想我可以自己处理模拟,但我认为这不是 InjectMocks
注释的目的。
感谢您的宝贵时间。
您似乎遇到了 Mockito 问题:mockito#1346。
它已经修复,所以您可以等待 public 发布或使用开发版本 2.17.2:https://bintray.com/mockito/maven/mockito-development/2.17.2 (release notes)