我面临一个问题,“Mockito.doNothing()”似乎没有按预期模拟该方法。 在下面的代码(伪代码)中,“执行 functionC”返回异常。 我试图通过模拟 classB 及其方法来测试 FunctionA。 考虑到 functionB 已被模拟为立即返回到调用者(而不执行 functionC ),我预计 Mockito.verify 会成功。 但是 testFunctionA() 遇到异常(由 functionC 抛出),请记住 functionC 不应该被执行(由于使用 Mockito.doNothing() 模拟了 functionB )。
如果我遗漏了什么,您能告诉我吗?任何其他模拟 void 方法(立即返回)的替代方法将受到高度赞赏。
谢谢, 瓦姆西。
public class classA {
public void functionA() {
int localA;
String localB;
B b = new B();
b.functionB(localA, localB);
}
}
public class classB {
public void functionB(int a, String b) {
functionC(a, b);
}
}
public class testClassA {
private classA objectA = new classA();
@Mock
classB objectB;
@Test
public void testFunctionA() {
Mockito.doNothing().when(objectB).functionB(Mockito.anyInt(),Mockito.anyString());
objectA.functionA();
Mockito.verify(objectB, Mockito.times(1)).functionB(Mockito.anyInt(),Mockito.anyString());
}
}
最佳答案
您永远不会在被测试的类classA
的实例中注入(inject)classB
模拟。因此,当您操作被测对象时,记录的行为将不会有效:
private classA objectA = new classA();
您可以在 ClassA
的构造函数或 functionA()
方法中传递 ObjectB
。
例如使用以下方法来做到这一点:
public void functionA(ClassB classB) {
int localA;
String localB;
classB.functionB(localA, localB);
}
在你的测试中:
objectA.functionA(objectB);
关于java - Junit 框架单元测试 : Mockito. doNothing() 在模拟 void 方法时无法按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48872085/