MOCKITO-根据调用方法的次数更改抛出的异常



我想对执行方法的前5次提出特定异常。之后,我想提出另一个例外。

理想情况下,我有这个代码段,显然不起作用

int count = 0;
int max = 5;
@Test
public void myTest(){
   ...
   doThrow(count++ < max ? myException1 : myException2).when(myClass).myMethod()
   ...
}

我该如何使它起作用?

您可以在OngoingStubbing返回的CC_2实例上使用thenThrow(Throwable... throwables)方法。
该方法接受var-args,这是调用模拟方法时连续投掷的例外。

@Test
public void myTest(){
   // ...
   Mockito.when(myClass.myMethod())
          .thenThrow( myException1, 
                      myException1, 
                      myException1, 
                      myException1, 
                      myException1,
                      myException2);
   // ...
}

或通过链接OngoingStubbing.thenThrow()调用,因为该方法实际返回OngoingStubbing对象:

@Test
public void myTest(){
   // ...
   Mockito.when(myClass.myMethod())
          .thenThrow(myException1)
          .thenThrow(myException1)
          .thenThrow(myException1)
          .thenThrow(myException1)
          .thenThrow(myException1)
          .thenThrow(myException2);
   // ...
}

您可以在第一次呼叫时返回异常,第二个通话中的另一件事:

when(myMock.myMethod(any()))
.thenThrow(new MyFirstException())
.thenThrow(new MySecondException())
.thenReturn(new MyObject();

这种方法可用于递归测试称为方法。

最后,我建议检查该方法是否使用正确的次数调用。

verify(myMock, times(3)).myMethod(any());

相关内容

  • 没有找到相关文章

最新更新