Утверждение, что исключение брошено в JUnit 4 и 5

Утверждают, что исключение брошено в JUnit 4 и 5

1. Вступление

В этом кратком руководстве мы рассмотрим, как с помощью библиотеки JUnit проверить, возникло ли исключение.

Конечно, мы обязательно рассмотрим версии JUnit 4 и JUnit 5.

Дальнейшее чтение:

Порядок испытаний в Юнит

Узнайте, как запускать тесты JUnit в произвольном порядке.

Read more

Утверждения в JUnit 4 и JUnit 5

Посмотрите на утверждения в JUnit 4 и 5.

Read more

2. Юнит 5

JUnit 5 Jupiter assertions API представляет методassertThrows для утверждения исключений.

Это принимает тип ожидаемого исключения и функциональный интерфейсExecutable, через который мы можем передать тестируемый код через лямбда-выражение:

@Test
public void whenExceptionThrown_thenAssertionSucceeds() {
    String test = null;
    assertThrows(NullPointerException.class, () -> {
        test.length();
    });
}

Здесь важно отметить, чтоthis assertion is satisfied when the enclosed code throws an exception of type NullPointerException or any of its derived types.

Это означает, что если мы передадимException в качестве ожидаемого типа исключения, любое выброшенное исключение сделает утверждение успешным, посколькуException является супертипом для всех исключений.

Если мы изменим приведенный выше тест на ожиданиеRuntimeException,, он также пройдет:

@Test
public void whenDerivedExceptionThrown_thenAssertionSucceds() {
    String test = null;
    assertThrows(RuntimeException.class, () -> {
        test.length();
    });
}

МетодassertThrows() обеспечивает более детальный контроль логики утверждения исключения, поскольку мы можем использовать __ для определенных частей кода.

3. JUnit 4

При использовании JUnit 4 мы можем простоuse the expected attribute of the @Test annotation объявить, что ожидаем возникновения исключения в любом месте аннотированного метода тестирования.

В результате тест завершится ошибкой, если указанное исключение не будет сгенерировано при запуске теста, и будет пройдено, если оно сгенерировано:

@Test(expected = NullPointerException.class)
public void whenExceptionThrown_thenExpectationSatisfied() {
    String test = null;
    test.length();
}

В этом примере мы заявили, что ожидаем, что наш тестовый код выдастNullPointerException.

Этого достаточно, если нас интересует только утверждение, что возникло исключение.

Когда нам нужно проверить некоторые другие свойства исключения, мы можем использовать правилоExpectedException.

Давайте посмотрим на пример проверки свойстваmessage исключения:

@Rule
public ExpectedException exceptionRule = ExpectedException.none();

@Test
public void whenExceptionThrown_thenRuleIsApplied() {
    exceptionRule.expect(NumberFormatException.class);
    exceptionRule.expectMessage("For input string");
    Integer.parseInt("1a");
}

В приведенном выше примере мы сначала объявляем правилоExpectedException. Затем в нашем тесте мы утверждаем, что код, который пытается проанализировать значениеInteger, приведет кNumberFormatException с сообщением «Для входной строки».

4. Заключение

В этой статье мы сфокусировались на утверждениях об исключениях в JUnit 4 и JUnit 5 и рассмотрели их.

Полный исходный код примеров доступенover on GitHub.