我是Mockito的新手和一般的单元测试,所以这是一个基本问题。鉴于此课程:
public class A{
private B b;
public A(){
b = new B();
}
private void test(){
b.some_other_method();
}
}
这不会成功地扼杀链条吗?
a = Mockito.mock(A.class);
b = Mockito.mock(B.class);
Mockito.when(b.some_other_method()).thenReturn("testing");
a.test();
谢谢!
答案 0 :(得分:2)
这不会有效,因为测试中的b
与A类中的b
不同。
另外请记住,你不应该嘲笑你的班级。我写了一个摘要in another answer,但足以说你应该在一个应该测试A的测试中使用真正的 A和 mock B。
您可以通过这种方式插入替换B实例,例如:
public class A{
private B b;
public A(){
b = new B();
}
/** Package private constructor used for testing. */
A(B b){
this.b = b;
}
private void test(){
b.some_other_method();
}
}
此时,您只需在测试中调用new A(b)
,并引用您的模拟B实例。