Mockito - 在另一个方法中存根方法调用

时间:2014-07-23 20:46:43

标签: unit-testing mocking mockito

我是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();

谢谢!

1 个答案:

答案 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实例。