Back to TIL list

Testando exceções com junit

Created at

Este artigo apresenta uma visão suscinta sobre testes de exceção com JUnit usando o idioma try/fail/catch, o parâmetro expected da anotação @Test e a anotação @Rule. Cada um dos métodos apresenta prós e contras.

Usando bloco try/catch

@Test
public void example1() {
    try {
        find("função que deveria lançar uma exceção");
        fail();
        // Ponto que nunca deveria ser alcançado quando o teste passar
    } catch (NotFoundException e) {
        assertThat(e.getMessage(), containsString("algo que indique que a exceção certa ocorreu"));
    }
    // ... Outras exceções podem ser tratadas aqui.
}
  • Vantagens:
    • Ter acesso à exceção para realizar outros procedimentos
    • Poder realizar outros asserts na mesma função
    • Funciona bem de os testes forem criado antes
  • Desvantagens:
    • Um erro comum é esquecer de incluir fail() como barreira causando um falso positivo

@Test (expected = Exception.class)

public void example2() throws NotFoundException {
    find("função que deveria lançar uma exceção");
    // Ponto que nunca deveria ser alcançado quando o teste passar
}
  • Vantagens:
    • Sintaxe muito mais concisa
    • Favorece a escrita de teste focados em um único ponto
  • Desvantagens:
    • Não é possível realizar outros testes após o find

ExpectedException Rule


@Test
public void example3() throws NotFoundException {
    exception.expect(NotFoundException.class);
    exception.expectMessage(containsString("algo que indique que a exceção certa ocorreu"));
    find("função que deveria lançar uma exceção");
    // Ponto que nunca deveria ser alcançado quando o teste passar
}
  • Vantagens:
    • Mais de uma expetativa sobre a mesma exceção podem ser testadas após o teste
  • Desvantagens:
    • Não é possível realizar outros testes após o find

Referências