Mockito:在另一个方法中模拟一个方法调用

时间:2018-02-16 21:19:40

标签: java junit mocking mockito

所以我试图在另一个方法中模拟方法调用,这里是伪代码

class A{

    public String getAName(String id){
        B b = new B();
        // do something
        return b.getBName(id);
    }
}

testgetName{

    public void testA(){

        B mockB = mock(B.class);        
        Mockito.doReturn("Bar").when(mockB).getBName(id);

        A a = new A();
        a.getAName(id); //this still calls "b.getBName(id)" in class implementation
    }

}

此处的问题是a.getAName仍然会调用b.getBName(id) - 不确定原因?

有关如何正确模拟b.getBName(id)的任何建议

由于

1 个答案:

答案 0 :(得分:4)

因为您没有在类A中注入/使用模拟对象。在A类中,您正在创建一个新的B对象。因此,从不使用模拟对象。要解决此问题,请将您的A类实施更改为以下内容:

B作为班级成员:

class A{
  B b;

  public String getAName(String id){

    // do something
    return b.getBName(id);
  }
}

然后在你的测试方法中将模拟对象注入到A类中的B成员。见下文:

public void testA()(){
    B mockB = mock(B.class);
    Mockito.doReturn("Bar").when(mockB).getBName(id);
    A a = new A();
    a.b = mockB; //add this line to use mock in A
    String testStr = a.getAName(id); //this still calls "b.getBName(id)" in class implementation
    System.out.println(testStr);

}