Есть ли лучший способ утверждать, что метод вызывает исключение в JUnit 5?
В настоящее время я должен использовать @Rule, чтобы проверить, что мой тест выдает исключение, но это не работает в тех случаях, когда я ожидаю, что несколько методов выдают исключения в моем тесте.
java
junit
junit5
junit-jupiter
steventrouble
источник
источник
Ответы:
Вы можете использовать
assertThrows()
, что позволяет тестировать несколько исключений в одном тесте. Благодаря поддержке лямбд в Java 8 это канонический способ проверки исключений в JUnit.Согласно документам JUnit :
источник
() ->
указывает на лямбда-выражение, которое принимает нулевые аргументы. Таким образом, «производственный код» , который , как ожидается , бросить исключение в блоке кода указывал на (то есть, вthrow new...
заявлении в фигурных скобках).В Java 8 и JUnit 5 (Юпитер) мы можем утверждать исключения следующим образом. С помощью
org.junit.jupiter.api.Assertions.assertThrows
Этот подход будет использовать функциональный интерфейс
Executable
вorg.junit.jupiter.api
.См .:
источник
assertThrows(NoSuchElementException.class, myLinkedList::getFirst);
Они изменили его в JUnit 5 (ожидается: InvalidArgumentException, фактический: вызванный метод), и код выглядит так:
источник
Теперь Junit5 предоставляет способ утверждать исключения
Вы можете протестировать как общие, так и настраиваемые исключения
Общий сценарий исключения:
ExpectGeneralException.java
ExpectGeneralExceptionTest.java
Вы можете найти образец для тестирования CustomException здесь: пример кода исключения assert
ExpectCustomException.java
ExpectCustomExceptionTest.java
источник
Я думаю, что это еще более простой пример
Вызов
get()
на факультативной , содержащий пустойArrayList
будет бросатьNoSuchElementException
.assertThrows
объявляет ожидаемое исключение и предоставляет лямбда-поставщика (не принимает аргументов и возвращает значение).Спасибо @prime за его ответ, который я надеюсь развить.
источник
assertThrows
возвращает выброшенное исключение. Таким образом, вы можете делатьNoSuchElementException e = assertThrows(NoSuchElementException.class, () -> opt2.get());
то же самое, что и ниже, вы можете делать любые утверждения для объекта исключения, который вы хотите.Вы можете использовать
assertThrows()
. Мой пример взят из документов http://junit.org/junit5/docs/current/user-guide/источник
Еще более простой лайнер. Никакие лямбда-выражения или фигурные скобки не требуются для этого примера с использованием Java 8 и JUnit 5
источник
На самом деле я думаю, что есть ошибка в документации для этого конкретного примера. Метод, который предназначен, является ожидаемым
источник
Вот простой способ.
Успешно, только когда вы ожидаете исключения.
источник