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
1@Test
2public void example1() {
3 try {
4 find("função que deveria lançar uma exceção");
5 fail();
6 // Ponto que nunca deveria ser alcançado quando o teste passar
7 } catch (NotFoundException e) {
8 assertThat(e.getMessage(), containsString("algo que indique que a exceção certa ocorreu"));
9 }
10 // ... Outras exceções podem ser tratadas aqui.
11}
- 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)
1public void example2() throws NotFoundException {
2 find("função que deveria lançar uma exceção");
3 // Ponto que nunca deveria ser alcançado quando o teste passar
4}
- 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
1
2@Test
3public void example3() throws NotFoundException {
4 exception.expect(NotFoundException.class);
5 exception.expectMessage(containsString("algo que indique que a exceção certa ocorreu"));
6 find("função que deveria lançar uma exceção");
7 // Ponto que nunca deveria ser alcançado quando o teste passar
8}
- 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