JUnit ErrorCollector @Rule con ejemplo

En un escenario normal, siempre que identifique algún error durante la ejecución de la prueba, deberá detener la prueba, corregir el error y volver a ejecutarla.

Pero JUnit tiene un enfoque ligeramente diferente. Con JUnit recopilador de errores, aún puede continuar con la ejecución de la prueba incluso después de que se encuentre un problema o la prueba falle. El recopilador de errores recopila todos los objetos de error y los informa solo una vez una vez finalizada la ejecución de la prueba.

¿Por qué utilizar el recopilador de errores?

Mientras escribe un script de prueba, desea ejecutar todas las pruebas incluso si alguna línea de código falla debido a una falla de la red, una falla de aserción o cualquier otro motivo. En esa situación, aún puede continuar ejecutando el script de prueba utilizando una característica especial proporcionada por JUnit conocido como “recolector de errores”.

Para esto, JUnit usos @Anotación de regla que se utiliza para crear un objeto de recolector de errores. Una vez creado el objeto para el recolector de errores, puede agregar fácilmente todos los errores al objeto usando el método addError (error arrojable). Como sabes, eso Desechable es la súper clase de Excepción y Error clase en Java. Cuando agrega errores de esta manera, estos errores se registrarán JUnit resultado de la prueba .

La ventaja de agregar todos los errores en un Recopilador de errores es que puede verificar todos los errores a la vez. Además, si el script falla en el medio, aún puede continuar ejecutándolo.

Nota: En el caso de utilizar un bloque simple de afirmación o prueba/catch, no será posible utilizar el método de recopilación de errores.

Código de muestra

Para comprender más sobre Error Collector, consulte el siguiente ejemplo de código que demuestra cómo crear un objeto Error Collector y agregar todos los errores en ese objeto para rastrear el 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.		
    }		
}	

¿Qué es @Rule en jUnit?

JUnit proporciona un tipo especial de manejo de pruebas, Caso de prueba o conjunto de pruebas utilizando @anotación de regla. Con @rule, puede agregar o redefinir fácilmente el comportamiento de la prueba.

Hay varias reglas integradas proporcionadas por JUnit API que un evaluador puede usar, o incluso usted puede escribir nuestra propia regla.

Vea la siguiente línea de código, que muestra cómo usar la anotación @rule junto con Error Collector:

@Rule				
public ErrorCollector collector= new ErrorCollector();

Ejemplo de uso de ErrorCollector

Para comprender el recopilador de errores, creemos una clase y una regla para recopilar todos los errores. Agregará todos los errores usando addError(throwable) aquí.

Vea el código a continuación que simplemente crea una regla que no es más que crear un "objeto recopilador de errores". Que se utiliza además para agregar todos los errores para informar el problema al 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!!!!");					
    }		
}		

PruebaRunner.java

Agreguemos la clase de prueba anterior en un ejecutor de pruebas y ejecútela para recopilar todos los errores. Vea el siguiente código:

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());							
   }		
}      

Salida:

Vea el seguimiento de fallos que rastrea todos los errores en un solo lugar:

Corredor de pruebas.Java Salida

Beneficios de la Cirugía de JUnit Colector de errores

Puedes usar JUnit aserción para validación funcional o GUI, por ejemplo

  1. afirmarEquals (mensaje de cadena, objeto esperado, objeto real) que compara que dos objetos son iguales.
  2. De manera similar, afirmar Verdadero (condición booleana) afirma que una condición es verdadera.

Al utilizar la afirmación, la prueba de validación se vuelve fácil. Pero un problema importante es que la ejecución de la prueba se detendrá incluso si falla una sola afirmación.

La continuidad de las pruebas y el manejo de la recuperación son cruciales para el éxito de la automatización de las pruebas. Error Collector es la mejor manera de manejar este tipo de escenarios.

Resum

  • El recopilador de errores de Junit permite que una prueba continúe incluso después de que se encuentre el primer problema y la prueba falle al final
  • El recopilador de errores recopila todos los objetos de error y solo los informa; después de todo, la ejecución de la prueba finaliza.
  • La ventaja de agregar todos los errores en un Recopilador de errores es que puede verificar todos los errores a la vez.
  • El recopilador de errores simplemente agrega errores usando el método addError(throwable err) proporcionado por ErrorCollector.java.