Mah*_*yar 1 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
}
}
Run Code Online (Sandbox Code Playgroud)
这里的问题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);
}
}
Run Code Online (Sandbox Code Playgroud)
然后在您的测试方法中将模拟对象注入类 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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14448 次 |
| 最近记录: |