Testando exceções com junit
Date: 2019-11-12Last modified: 2022-10-07
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
- Um erro comum é esquecer de incluir
@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
- Não é possível realizar outros testes após o
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
- Não é possível realizar outros testes após o