使用Mockito模拟嵌套对象



我们有一个这样的类:
(请注意,我没有更改类定义的自由(

class X {
private B b ;
public X( C c ) {
b = new B(c ) ;
}
}

我将如何使用Mockito为上述类编写junit测试?

我试过了:

class XTest {
@Mock
private C c ;
@InjectMocks
private X x ;
...
}

Mockito正在注入一个mock C。然而,新的B(C(行抛出了一个异常,因为B(不是mock(不准备使用mock C

不知道你想做什么。如果你只想测试X,只需模拟它的直接依赖项B,因为从X的角度来看,你只需要确保它与B正确交互。没有必要关心X如何与其依赖项的依赖项(即C(交互。

为了测试B是否与C正确交互,它属于B的测试用例,但不属于X。

因此,首先重构X,使其可以直接通过构造函数注入B:

class X {
private B b ;
public X(B b){
this.b = b;
}
public X(C c) {
this(new B(c));
}
}

然后你的单元测试看起来就像:

class XTest {
@Mock
private B b ;

@InjectMocks
private X x ; 
}

最新更新