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

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

谢谢

最佳答案

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

B 作为类的成员:

class A{
  B b;

  public String getAName(String id){

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

然后在您的测试方法中将模拟对象注入(inject)到 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);

}

关于java - Mockito:在另一个方法中模拟方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48835005/

相关文章:

java - 什么时候触发 Full GC?

java - 如何修复 : "Parameter index out of range (2 > number of parameters, which is 1)."

Eclipse中的Java测试,编写方法

java - 获取resources文件夹下所有文件列表

c# - 我如何使用 Caller Info 属性进行 TDD?

node.js - 监视 Date.now() 导致 jasmine-node 没有响应

javascript - mock 函数开 Jest 但开 Jest 调用原始函数

java - 以编程方式滚动 NatTable

java - ArrayIndexOutOfBoundsException : 3 issue in glassfish. 如何解决?

java - 从可配置的 JAR 运行 JMeter