我试图让我的一个模拟对象在调用特定方法时抛出一个检查过的异常。我正在尝试下面的方法。
@Test(expectedExceptions = SomeException.class)
public void throwCheckedException() {
List<String> list = mock(List.class);
when(list.get(0)).thenThrow(new SomeException());
String test = list.get(0);
}
public class SomeException extends Exception {
}
但是,这会产生以下错误。
org.testng.TestException:
Expected exception com.testing.MockitoCheckedExceptions$SomeException but got org.mockito.exceptions.base.MockitoException:
Checked exception is invalid for this method!
Invalid: com.testing.MockitoCheckedExceptions$SomeException
看看Mockito documentation,他们只使用RuntimeException
,难道不能用Mockito抛出来自模拟对象的检查异常吗?
发布于 2018-01-15 18:24:49
一种解决方法是使用willAnswer()
方法。
例如,下面的代码使用BDDMockito
进行工作(不抛出MockitoException
,但实际上按照这里的要求抛出了一个选中的Exception
):
given(someObj.someMethod(stringArg1)).willAnswer( invocation -> { throw new Exception("abc msg"); });
对于普通的Mockito,等效的方法是使用doAnswer
方法
发布于 2020-02-15 03:48:32
在Kotlin中,这对我很有效:
when(list.get(0)).thenThrow(new ArrayIndexOutOfBoundsException());
注意:抛出除Exception()以外的任何已定义异常
https://stackoverflow.com/questions/3762047
复制相似问题