繁体   English   中英

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

[英]Mockito: Mock a method call inside another method

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

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);

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM