В разработке программного обеспечения на Java с использованием JUnit для написания тестов, иногда возникает необходимость проверить не только тип исключения, которое было вызвано, но и сообщение об исключении. Особенно это актуально, когда сообщение об исключении содержит важную информацию, которая помогает понять, что именно пошло не так.
Предположим, есть метод, который бросает исключение с определенным сообщением. Например:
public void checkEmployeeId(String id) { if (id == null) { throw new RuntimeException("Employee ID is null"); } // some more code }
И хотелось бы проверить в JUnit тесте не только то, что метод бросает исключение RuntimeException
, но и то, что сообщение об исключении точно равно «Employee ID is null».
В JUnit 4 существует аннотация @Test
, которую можно использовать для указания ожидаемого исключения. Например:
@Test(expected = RuntimeException.class) public void testCheckEmployeeId() { checkEmployeeId(null); }
Однако проблема в том, что этот способ не позволяет проверять сообщение об исключении.
В JUnit 5 введена новая концепция assertThrows
, которая позволяет не только проверять тип исключения, но и проверять сообщение об исключении. Вот как можно использовать assertThrows
для проверки сообщения об исключении:
@Test public void testCheckEmployeeId() { Exception exception = assertThrows(RuntimeException.class, () -> { checkEmployeeId(null); }); String expectedMessage = "Employee ID is null"; String actualMessage = exception.getMessage(); assertTrue(actualMessage.contains(expectedMessage)); }
В этом примере assertThrows
принимает в качестве аргументов класс исключения и исполняемый блок кода (в виде лямбда-выражения). Итак, assertThrows
выполняет переданный блок кода и проверяет, что он бросает исключение указанного типа. Если это так, то assertThrows
возвращает это исключение, и далее можно проверить его сообщение.
Этот способ позволяет гибко управлять проверкой исключений и предоставляет возможность проверить не только тип исключения, но и его сообщение. Это может быть особенно полезно в ситуациях, когда сообщение об исключении содержит важную информацию о проблеме.
Добавить комментарий