我对@RunWith(MockitoJUnitRunner.class)
和@InjectMock
注释以及它们彼此之间的关系有点困惑。根据我的理解,通过提供@RunWith(MockitoJUnitRunner.class)
,我们不需要像mock(ABC.class)
那样初始化模拟。
另一方面,@InjectMocks
使用getter和setter自动注入模拟。文档说:
@InjectMocks
目前它只支持setter注入。如果您更喜欢构造函数注入 - 请提供补丁....
我不明白的是,当我删除下面的@InjectMocks
时,我会得到测试的nullpointer异常,因为依赖项为null。这是否意味着支持基于construtor的注入?或者它与@RunWith(MockitoJUnitRunner.class)
这是代码
@RunWith(MockitoJUnitRunner.class)
public class MyClassTest {
@Mock
private Dependency dependency;
@InjectMocks
private MyClass cls = new MyClass(dependency);
//...
}
class MyClass {
private Dependency dependency;
MyClass(Dependency dependency) {
this.dependency = dependency;
}
//...
}