Publicado em: 12/Nov/2019
Atualizado em: 21/Nov/2019

Testando exceções com junit

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

@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

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

Referências

comments powered by Disqus