问题描述
我无法创建 sqlServerException 的实例,因为构造函数都是内部的。使用 sqlException 时出现以下错误
org.mockito.exceptions.base.MockitoException:检查异常是 此方法无效!
方法签名(在 sqlServerPreparedStatement 上):
public boolean execute() throws sqlServerException,sqlTimeoutException
和... public final class sqlServerException extends sqlException
模拟:
val fakeCmd : sqlServerPreparedStatement = mock()
...
whenever(fakeCmd.execute()).thenThrow(sqlException()) // this line fails
我做错了什么?难道我不能抛出基本/超级异常吗?
重新建议的问题:
建议的问题与我要问的问题大不相同,另一个问题中的操作试图抛出 SomeException
,这不是由 List.get
抛出的,也不是在继承树中
如果您看到上面的“方法签名(在 sqlServerPreparedStatement 上)”,则该方法抛出 sqlServerException
=> public final class sqlServerException extends sqlException
但它不喜欢whenever(fakeCmd.execute()).thenThrow(sqlException())
此外,所指出的公认答案是抛出 RuntimeException
因为 indexoutofboundsexception extends RuntimeException
在这种情况下,sqlServerException extends sqlException
也是如此
解决方法
我评论了另一个问题,最后有一个答案(不是公认的)可能适合您的情况。
一种解决方法是使用 willAnswer()
方法。
例如,以下使用 BDDMockito
工作(并且不会抛出 MockitoException 但实际上根据此处的要求抛出已检查的异常):
given(someObj.someMethod(stringArg1)).willAnswer(invocation -> {
throw new Exception("abc msg");
});
普通 Mockito 的等价物将使用 doAnswer 方法