模拟类的属性而不考虑构造函数签名



Class

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,我该怎么办?

我会提供第二个构造函数,包私有,像这样。

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模拟。

最新更新