Как я могу создать исключение SQLServerException (или SQLException) с помощью Mockito?

Я не могу создать экземпляр SQLServerException, потому что все ctors являются внутренними. Получение ошибки ниже при использовании 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


person Jason    schedule 16.04.2021    source источник
comment
Отвечает ли это на ваш вопрос? бросать проверенные исключения из макетов с помощью Mockito   -  person Vitor Cavalcanti    schedule 20.04.2021
comment
Нет, это не тот вопрос   -  person Jason    schedule 23.04.2021


Ответы (1)


Я прокомментировал другой вопрос, и в конце есть ответ (не принятый), который может подойти в вашем случае.


Обходной путь — использовать метод willAnswer().

Например, следующее работает (и не выдает MockitoException, а фактически выдает проверенное исключение, как здесь требуется) с использованием BDDMockito:

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

Эквивалентом простого Mockito будет использование метода doAnswer


Вот прямая ссылка на этот ответ: https://stackoverflow.com/a/48261005/13210306

person Vitor Cavalcanti    schedule 23.04.2021