JUnit ErrorCollector @Rule com exemplo

Em um cenรกrio normal, sempre que vocรช identificar algum erro durante a execuรงรฃo do teste, vocรช interromperรก o teste, corrigirรก o erro e executarรก novamente o teste.

BUT JUnit tem uma abordagem um pouco diferente. Com JUnit coletor de erros, vocรช ainda poderรก continuar com a execuรงรฃo do teste mesmo depois que um problema for encontrado ou o teste falhar. O coletor de erros coleta todos os objetos de erro e os relata apenas uma vez apรณs o tรฉrmino da execuรงรฃo do teste.

Por que usar o Coletor de Erros?

Ao escrever um script de teste, vocรช deseja executar todos os testes mesmo se alguma linha de cรณdigo falhar devido a falha de rede, falha de asserรงรฃo ou qualquer outro motivo. Nessa situaรงรฃo, vocรช ainda pode continuar executando o script de teste usando um recurso especial fornecido por JUnit conhecido como โ€œcoletor de errosโ€.

Por esta, JUnit utiliza Anotaรงรฃo @Rule que รฉ usado para criar um objeto de coletor de erros. Depois que o objeto para coletor de erros for criado, vocรช poderรก adicionar facilmente todos os erros ao objeto usando o mรฉtodo addError (erro lanรงรกvel). Como vocรช sabe, isso Lanรงรกvel รฉ a superclasse de Exceรงรฃo e erro aula em Java. Quando vocรช adiciona erros desta forma, esses erros serรฃo registrados JUnit resultado do teste .

A vantagem de adicionar todos os erros em um Coletor de Erros รฉ que vocรช pode verificar todos os erros de uma sรณ vez. Alรฉm disso, se o script falhar no meio, ele ainda poderรก continuar executando-o

Observaรงรฃo: No caso de usar assert simples ou bloco try/catch, usar o mรฉtodo coletor de erros nรฃo serรก possรญvel.

Cรณdigo de amostra

Para entender melhor o coletor de erros, veja o exemplo de cรณdigo abaixo, que demonstra como criar um objeto coletor de erros e adicionar todos os erros desse objeto ร  lista de erros. traco problema:

package guru99.junit;		

import org.junit.Rule;		
import org.junit.Test;		
import org.junit.rules.ErrorCollector;		

public class ErrorCollectorExample {				
    @Rule		
    public ErrorCollector collector = new ErrorCollector();							

    @Test		
    public void example() {					
    collector.addError(new Throwable("There is an error in first line"));							
    collector.addError(new Throwable("There is an error in second line"));							
    collector.checkThat(getResults(),			
                not(containsString("here is an error")));			
    // all lines of code will execute and at the end a combined failure will		
    be logged in.		
    }		
}	

O que รฉ @Rule em jUnit?

JUnit fornece um tipo especial de tratamento de testes, Caso de teste ou conjunto de testes usando anotaรงรฃo @rule. Usando @rule, vocรช pode adicionar ou redefinir facilmente o comportamento do teste.

Existem vรกrias regras internas fornecidas por JUnit API que um testador pode usar, ou atรฉ mesmo vocรช pode escrever nossa prรณpria regra.

Veja a linha de cรณdigo abaixo, que mostra como usar a anotaรงรฃo @rule junto com o Error Collector:

@Rule				
public ErrorCollector collector= new ErrorCollector();

Exemplo usando ErrorCollector

Para entender o coletor de erros, vamos criar uma classe e uma regra para coletar todos os erros. Vocรช adicionarรก todos os erros usando addError(throwable) aqui.

Veja o cรณdigo abaixo que simplesmente cria uma regra que nada mais รฉ do que criar um โ€œobjeto Coletor de Errosโ€. Que รฉ ainda usado para adicionar todos os erros a fim de relatar o problema no final:

ErrorCollectorExample.java

package guru99.junit;		

import org.junit.Assert;		
import org.junit.Rule;		
import org.junit.Test;		
import org.junit.rules.ErrorCollector;		

public class ErrorCollectorExample {				
    @Rule		
    public ErrorCollector collector = new ErrorCollector();							

    @Test		
    public void example() {					
    collector.addError(new Throwable("There is an error in first line"));							
    collector.addError(new Throwable("There is an error in second line"));							

        System.out.println("Hello");					
        try {			
            Assert.assertTrue("A " == "B");					
        } catch (Throwable t) {					
            collector.addError(t);					
        }		
        System.out.println("World!!!!");					
    }		
}		

TestRunner.java

Vamos adicionar a classe de teste acima em um executor de teste e executรก-la para coletar todos os erros. Veja o cรณdigo abaixo:

package guru99.junit;		

import org.junit.runner.JUnitCore;		
import org.junit.runner.Result;		
import org.junit.runner.notification.Failure;		

public class TestRunner {				
			public static void main(String[] args) {									
      Result result = JUnitCore.runClasses(ErrorCollectorExample.class);					
			for (Failure failure : result.getFailures()) {							
         System.out.println(failure.toString());					
      }		
      System.out.println("Result=="+result.wasSuccessful());							
   }		
}      

Saรญda:

Veja a falha trace qual tracreรบne todos os erros em um sรณ lugar:

TestRunner.Java saรญda

Benefรญcios da JUnit Coletor de erros

Vocรช pode usar JUnit afirmaรงรฃo para validaรงรฃo funcional ou GUI, por exemplo

  1. assertEquals(String mensagem, Objeto esperado, Objeto real) que compara que dois objetos sรฃo iguais.
  2. Da mesma forma, assertTrue(Boolean Condition) afirma que uma condiรงรฃo รฉ verdadeira.

Usando asserรงรฃo, o teste de validaรงรฃo torna-se fรกcil. Mas uma questรฃo importante รฉ que a execuรงรฃo do teste serรก interrompida mesmo se uma รบnica asserรงรฃo falhar.

A continuidade dos testes e o tratamento da recuperaรงรฃo sรฃo cruciais para o sucesso da automaรงรฃo de testes. Error Collector รฉ a melhor maneira de lidar com esse tipo de cenรกrio.

Resumo

  • O coletor de erros Junit permite que um teste continue mesmo depois que o primeiro problema for encontrado e o teste falhar no final
  • O coletor de erros coleta todos os objetos de erro e reporta apenas, afinal, a execuรงรฃo do teste acabou
  • A vantagem de adicionar todos os erros em um Coletor de Erros รฉ que vocรช pode verificar todos os erros de uma vez
  • O coletor de erros simplesmente adiciona erros usando o mรฉtodo addError(throwable err) fornecido por ErrorCollector.java.

Resuma esta postagem com: