我想对执行方法的前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());