我想测试一个方法多次调用另一个方法。

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,因为您的方法返回了正确的值这一事实证明了它执行了正确的操作。

10-03 00:06