JUnit ErrorCollector @Rule con ejemplo
⚡ Resumen inteligente
JUnit ErrorCollector es una regla que permite que una prueba continúe ejecutándose después de un fallo, recopilando todos los objetos de error y reportándolos juntos una vez que el método de prueba finaliza, en lugar de detenerse.ping en el primer problema.
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 el JUnit Gracias al recolector de errores, puede continuar con la ejecución de la prueba incluso después de que se detecte un problema o la prueba falle. El recolector 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?
Al escribir un script de prueba, querrá ejecutar todas las pruebas incluso si alguna línea de código falla debido a una falla de red, una falla de aserción o cualquier otra razón. En esa situación, aún puede continuar ejecutando el script de prueba utilizando una función especial proporcionada por JUnit conocido como “recolector de errores”.
Para esto, JUnit utiliza el @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 utilizando el método addError (error arrojable). Como sabes, Desechable es la superclase de la Excepción y Error clases en JavaCuando agregue errores de esta manera, estos errores se registrarán en el JUnit resultado de la prueba.
La ventaja de agregar todos los errores a un recopilador de errores es que se pueden verificar todos a la vez. Además, si el script falla a mitad de la ejecución, esta continúa hasta el final del método de prueba.
Nota: : En el caso de utilizar una simple aserción o un bloque try/catch, no será posible utilizar el método de recolección de errores.
Código de muestra
Para comprender mejor Error Collector, consulte el ejemplo de código a continuación, que muestra cómo crear un objeto Error Collector y agregar todos los errores a ese objeto. track 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. } }
Nota: Este es un ejemplo ilustrativo.tract, no es un archivo compilable. Su comentario final se extiende a una segunda línea sin una // inicial, y getResults() más los comparadores de Hamcrest no se muestran. La versión completa ejecutable se encuentra a continuación. Ejemplo de uso de ErrorCollector.
¿Qué es @Rule en JUnit?
JUnit proporciona un tipo especial de manejo de pruebas, Caso de prueba o conjunto de pruebas mediante el uso del @Anotación de reglaUtilizando @Rule, puedes agregar o redefinir fácilmente el comportamiento de la prueba.
Existen varias reglas integradas proporcionadas por el JUnit API que un probador puede usar, y también puedes escribir tu propia regla. Un campo de regla debe ser público, no estático y de un tipo que implemente TestRule.
Vea la siguiente línea de código, que muestra cómo usar la anotación @Rule junto con el Recopilador de errores:
@Rule public ErrorCollector collector= new ErrorCollector();
JUnit Nota 5: Jupiter reemplazó las reglas con la API de extensión, por lo que @Rule y ErrorCollector no existen en org.junit.jupiter. Los equivalentes más cercanos son Assertions.assertAll() y AssertJ SoftAssertions. JUnit El código 4 que se muestra aquí todavía pasa por el motor antiguo. Vea el JUnit anotaciones Tutorial para el mapa completoping.
Ejemplo de uso de ErrorCollector
Para entender el recolector de errores, vamos a crear una clase y una regla para recopilar todos los errores. Aquí, agregarás todos los errores usando addError(throwable).
Vea el código a continuación, que simplemente crea una regla que no es más que un "objeto Recopilador de errores". Se utiliza además para agregar todos los errores con el fin de 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
Añadamos la clase de prueba anterior a un ejecutor de pruebas y ejecutémosla para recopilar todos los errores. Vea el código a continuación:
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 fallo trace, cuál traces todos los errores en un solo lugar. El JUnit La vista contabiliza una ejecución, pero informa de dos errores y un fallo, cada uno con su propio número de línea:
Beneficios de la Cirugía de JUnit Colector de errores
Puedes utilizar una JUnit afirmación para validación funcional o de interfaz gráfica de usuario, por ejemplo:
- assertEquals(String message, Object expected, Object actual), que compara si dos objetos son iguales.
- De manera similar, afirmar Verdadero (condición booleana) afirma que una condición es verdadera.
Mediante las aserciones, las pruebas de validación se simplifican. Sin embargo, un problema importante es que la ejecución de las pruebas se detendrá incluso si falla una sola aserción.
La gestión de la continuidad y recuperación de las pruebas es crucial para el éxito de la automatización de pruebas, y es de suma importancia a largo plazo. Selenium En estos casos, reiniciar el navegador tras cada comprobación fallida resulta costoso. Error Collector es la mejor solución para gestionar este tipo de situaciones.

