我想测试一个方法多次调用另一个方法。
Class Sample{
OtherClass otherClass;
public OutputPoJo callABCMultipleTImes(){
OutputPoJo outputPojo;
try{
outputPojo = otherClass.callABC();
} catch(RuntimeException ex){
//Retrying call one more time
outputPojo = otherClass.callABC();
}
return outputPojo;
}
}
我想测试这种方法。为此,我正在做类似的事情,并且对于不同的组合,这对我来说效果很好。
public void testCallABCMultipleTImes(){
when(otherClass.callABC())
.thenThrow(new RuntimeException("First try failed.")).
.thenReturn(new OutputPOJO());
mockedSampleClass.callABCMultipleTImes();
Mockito.verify(otherClass,Mockito.times(2)).callABC();
}
基本上,我正在检查我第一次和第二次都获得异常,我得到了成功的响应。我通过验证该方法被调用两次来进行检查。
这是测试这种情况的正确方法还是其他方法?
谢谢!
最佳答案
您应该测试您的方法是否具有正确的行为,即它是否返回您希望其返回的值:
public void testCallABCMultipleTImes(){
OutputPOJO value = new OutputPOJO();
when(otherClass.callABC())
.thenThrow(new RuntimeException("First try failed."))
.thenReturn(value);
assertEquals(value, mockedSampleClass.callABCMultipleTImes());
}
从理论上讲,无需调用
verify
,因为您的方法返回了正确的值这一事实证明了它执行了正确的操作。