课程
public class Foo {
private MyClass obj;
public Foo(String s, int i, boolean b) {
MyOtherClass otherObj = OtherClassFactory.getInstance();
this.obj = new MyClass(s, i, b, otherObj);
}
//More Code
}
构造函数采用一些参数,从工厂检索实例,然后使用所有这些局部变量实例化其具有的一个属性(obj
)。
但是,我所关心的只是嘲笑obj
本身。我不在乎构造函数的任何参数,也不在意otherObj
。
我尝试仅注入属性:
public class FooTest {
@Mock
private MyClass fakeObj;
@InjectMocks
private Foo foo;
//More Code
}
但是抱怨不了,
无法实例化类型为“
@InjectMocks
”的名为“foo
”的class Foo
字段。 您尚未在字段声明中提供实例,所以我试图 构造实例。但是构造函数或初始化 块引发异常:OtherClassFactory
尚未初始化。
这是我正在尝试做的事情,如果可以的话,怎么做?如果没有,我需要模拟OtherClassFactory
,我该怎么做?
答案 0 :(得分:2)
我将提供第二个构造函数,包私有的,像这样。
public Foo(String s, int i, boolean b) {
this(new MyClass(s, i, b, OtherClassFactory.getInstance());
}
Foo(MyClass obj) {
this.obj = obj;
}
然后在测试中,您只需编写
Foo toTest = new Foo(mockMyClass);
其中mockMyClass
是您的Mockito模拟。