Когда разрабатываются тесты на Java с использованием фреймворка JUnit, часто возникает необходимость проверить, выбрасывает ли метод ожидаемое исключение. Это важно для корректной работы программы.
Примером может быть случай, когда в тесте ожидается выброс исключения. Допустим, есть метод, который выполняет деление на ноль. В данной ситуации ожидается выброс исключения типа ArithmeticException
.
public void divisionByZero() { int result = 10 / 0; }
Существует несколько способов проверки выброса исключений в JUnit 5.
Использование assertThrows
JUnit 5 предоставляет удобный метод assertThrows()
, который можно использовать для проверки исключений. Этот метод принимает два аргумента: класс ожидаемого исключения и исполняемый блок кода, в котором ожидается выброс исключения.
@Test public void whenExceptionThrown_thenAssertionSucceeds() { Exception exception = assertThrows(ArithmeticException.class, () -> { int result = 10 / 0; }); String expectedMessage = "/ by zero"; String actualMessage = exception.getMessage(); assertTrue(actualMessage.contains(expectedMessage)); }
В данном случае сначала проверяется, что метод действительно выбрасывает исключение типа ArithmeticException
. Затем проверяется, что сообщение исключения содержит ожидаемую строку.
Использование ExpectedException Rule
В предыдущих версиях JUnit (до JUnit 5) для проверки выброса исключений использовался механизм правил (@Rule
). Однако в JUnit 5 этот подход устарел и заменен на использование assertThrows
.
@Rule public ExpectedException exceptionRule = ExpectedException.none(); @Test public void whenExceptionThrown_thenRuleIsApplied() { exceptionRule.expect(ArithmeticException.class); exceptionRule.expectMessage("/ by zero"); int result = 10 / 0; }
В данном случае сначала устанавливается ожидание, что будет выброшено исключение типа ArithmeticException
с определенным сообщением, а затем выполняется блок кода, в котором ожидается выброс исключения.
В результате, в JUnit 5 для проверки выброса исключений рекомендуется использовать метод assertThrows
, который является более универсальным и гибким инструментом.
Добавить комментарий