如何使用 Mockito 抛出 SQLServerException(或 SQLException)?

How can I throw an SQLServerException (or SQLException) with Mockito?

我无法创建 SQLServerException 的实例,因为 ctors 都是内部的。使用 SQLException

时出现以下错误

org.mockito.exceptions.base.MockitoException: Checked exception is invalid for this method!

方法签名(在 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

我做错了什么?我不应该抛出 base/super 异常吗?

关于建议的问题: 建议的问题与我要问的非常不同,另一个问题中的 op 试图抛出 SomeException 而不是 List.get 或继承树

抛出的

如果您看到上面的“方法签名(在 SQLServerPreparedStatement 上)”,该方法将抛出 SQLServerException => public final class SQLServerException extends SQLException

但是不喜欢whenever(fakeCmd.execute()).thenThrow(SQLException())

此外,所指出的公认答案是抛出 RuntimeException 因为 IndexOutOfBoundsException extends RuntimeException

在这种情况下,SQLServerException extends SQLException

也是如此

我评论了另一个问题,最后有一个答案(不是公认的)可能适合您的情况。


解决方法是使用 willAnswer() 方法。

例如以下工作(并且不抛出 MockitoException 但实际上抛出此处要求的检查异常)使用 BDDMockito:

given(someObj.someMethod(stringArg1)).willAnswer(invocation -> { 
    throw new Exception("abc msg");
});

普通 Mockito 的等价物将使用 doAnswer 方法


这是该答案的直接 link: