Когда разрабатываются тесты на 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, который является более универсальным и гибким инструментом.
Перейти в телеграм, чтобы получить результаты теста



Забрать
Добавить комментарий