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