Afirmar que uma exceção é lançada nas JUnit 4 e 5

Afirmar que uma exceção é lançada nas JUnit 4 e 5

1. Introdução

Neste tutorial rápido, veremos como testar se uma exceção foi lançada, usando a biblioteca JUnit.

Claro, vamos nos certificar de cobrir as versões JUnit 4 e JUnit 5.

Leitura adicional:

A ordem dos testes no JUnit

Aprenda a executar testes JUnit em um pedido personalizado.

Read more

Asserções na JUnit 4 e JUnit 5

Uma olhada nas afirmações nas JUnit 4 e 5.

Read more

2. JUnit 5

JUnit 5 Jupiter assertions API apresenta o métodoassertThrows para declarar exceções.

Isso leva o tipo de exceção esperada e uma interface funcionalExecutable onde podemos passar o código em teste por meio de uma expressão lambda:

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

É importante notar aqui quethis assertion is satisfied when the enclosed code throws an exception of type NullPointerException or any of its derived types.

Isso significa que se passarmosException como o tipo de exceção esperado, qualquer exceção lançada fará a asserção bem-sucedida, poisException é o supertipo para todas as exceções.

Se mudarmos o teste acima para esperar umRuntimeException,, isso também passará:

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

O métodoassertThrows() permite um controle mais refinado para a lógica de asserção de exceção porque podemos usá-lo __ em torno de partes específicas do código.

3. JUnit 4

Ao usar o JUnit 4, podemos simplesmenteuse the expected attribute of the @Test annotation para declarar que esperamos que uma exceção seja lançada em qualquer lugar no método de teste anotado.

Como resultado, o teste falhará se a exceção especificada não for lançada quando o teste for executado e será aprovado se for lançada:

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

Neste exemplo, declaramos que esperamos que nosso código de teste resulte em umNullPointerException.

Isso é o suficiente se estamos apenas interessados ​​em afirmar que uma exceção foi lançada.

Quando precisamos verificar algumas outras propriedades da exceção, podemos usar a regraExpectedException.

Vejamos um exemplo de verificação da propriedademessage de uma exceção:

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

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

No exemplo acima, primeiro declaramos a regraExpectedException. Então, em nosso teste, estamos afirmando que o código que tenta analisar um valorInteger resultará em umNumberFormatException com a mensagem “Para string de entrada”.

4. Conclusão

Neste artigo, focamos e abordamos a afirmação de exceções com JUnit 4 e JUnit 5.

O código-fonte completo dos exemplos está disponívelover on GitHub.