如何使用 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:
我无法创建 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: