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)的任何建议

谢谢

因为您没有在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);
}

相关内容

  • 没有找到相关文章

最新更新