Тестирование кода на наличие исключений — важная составляющая процесса разработки. В Java для этого можно использовать фреймворк JUnit. Основная проблема в том, как идиоматически использовать JUnit, чтобы проверить, что некоторый код выбрасывает исключение.
Рассмотрим типичный сценарий. Допустим, есть метод, который должен выбрасывать исключение IndexOutOfBoundsException при выполнении определенной операции. Как это можно проверить с помощью JUnit?
@Test
public void testMethodThrowsException() {
    boolean exceptionThrown = false;
    try {
        someMethod();
    } catch (IndexOutOfBoundsException e) {
        exceptionThrown = true;
    }
    assertTrue(exceptionThrown);
}
В этом коде мы вызываем метод someMethod(), который, как мы ожидаем, должен выбросить IndexOutOfBoundsException. Если исключение выброшено, то мы устанавливаем флаг exceptionThrown в true и затем проверяем его значение. 
Однако, в JUnit есть более изящные и короткие способы проверки исключений.
Использование аннотации @Test(expected = Exception.class)
Самый простой способ — это использование аннотации @Test с параметром expected. Этот параметр принимает класс исключения, которое мы ожидаем увидеть. Вот как это выглядит на практике:
@Test(expected = IndexOutOfBoundsException.class)
public void testMethodThrowsException() {
    someMethod();
}
Если метод someMethod() выбросит IndexOutOfBoundsException, то тест пройдет, иначе он упадет, что и требуется.
Использование assertThrows()
В JUnit 5 представлен новый метод assertThrows(), который позволяет более явно и гибко управлять процессом проверки исключений.
@Test
public void testMethodThrowsException() {
    assertThrows(IndexOutOfBoundsException.class, () -> {
        someMethod();
    });
}
В этом случае, assertThrows() принимает два аргумента: класс исключения и лямбда-выражение с вызовом метода.
Использование assertThrows() дает больше гибкости, так как позволяет проверить не только тип исключения, но и его сообщение или другие свойства.
Таким образом, в JUnit есть несколько способов проверки исключений, и их выбор зависит от конкретной ситуации и предпочтений разработчика.
 
                     
                                     
                                     Перейти в телеграм, чтобы получить результаты теста
                                            Перейти в телеграм, чтобы получить результаты теста
                                         
                             



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