Я пытаюсь заставить один из моих поддельных объектов выдать проверенное исключение при вызове определенного метода. Я пытаюсь следующее.
@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 , которую они используют RuntimeException
, разве нельзя выбрасывать отмеченные исключения из фиктивного объекта с помощью Mockito?
Throws
аннотацией, чтобы компилятор генерировал тот же байт-код, что и объявления бросков в эквивалентном коде Java. Смотрите [здесь] ( kotlinlang.org/api/latest/jvm/stdlib/kotlin.jvm/-throws/… ) для более подробной информации.Обходной путь должен использовать
willAnswer()
метод.Например, следующее работает (и не
MockitoException
выдает a, но на самом деле выдает проверенныйException
здесь, как требуется здесь), используяBDDMockito
:Эквивалент для простого Mockito будет использовать
doAnswer
методисточник
willAnswer( invocation -> { throw new Exception("abc msg"); }).given(someObj).someMethod(stringArg1);
когда метод вернетсяvoid
.willThrow()
обычно позволяет, я написал GistdoAnswer
изnhaarman.mockitokotlin2
Следует отметить , что в целом, Mockito это позволяет бросать проверенные исключения, пока исключение объявляется в подписи сообщения. Например, учитывая
законно писать:
Однако, если вы выбрасываете проверенное исключение, не объявленное в сигнатуре метода, например,
Mockito потерпит неудачу во время выполнения с несколько вводящим в заблуждение общим сообщением:
Это может привести вас к мысли, что проверенные исключения в целом не поддерживаются, но на самом деле Mockito только пытается сказать вам, что это проверенное исключение недопустимо для этого метода .
источник
Есть решение с Kotlin:
Откуда дается
источник
Это работает для меня в Котлине:
Примечание. Бросьте любое определенное исключение, кроме Exception ().
источник
Exception