Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг Управление проектами
10 Июл 2023
2 мин
1114

Тестирование исключений в JUnit

Тестирование кода на наличие исключений — важная составляющая процесса разработки. В Java для этого можно использовать фреймворк JUnit. Основная проблема

Тестирование кода на наличие исключений — важная составляющая процесса разработки. В 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 есть несколько способов проверки исключений, и их выбор зависит от конкретной ситуации и предпочтений разработчика.

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