test - pruebas junit en java
¿Puedo hacer JUnit más detallado? (9)
Me gustaría hacer que grite ¡hurra cada vez que una afirmación afirmativa tenga éxito o, al menos, que muestre la cantidad de afirmaciones afirmativas exitosas que se encontraron.
Estoy usando JUnit4.
¿Alguna sugerencia?
¿Puedes considerar?
1) descargar la fuente de junit
2) para modificar la clase org.junit.Assert para hacer las modificaciones que estés buscando
Desafortunadamente, el javadoc de junit dice que solo se registran las afirmaciones fallidas ( http://junit.sourceforge.net/javadoc_40/index.html )
así que parece que no sería posible
Difícil de hacer. Todos los métodos assert son miembros estáticos de la clase Assert, lo que implica que RunNotifier (que cuenta las pruebas exitosas y fallidas) no está al alcance.
Si no se abstiene de un hack desagradable: tome las fuentes de JUnit, parcheelas para almacenar el notificador actual en un campo estático de Assert cuando ejecute pruebas de modo que los métodos estáticos puedan informar correctamente a este notificador.
Estoy bastante seguro de que puedes crear un TestRunner personalizado que lo haga. Terminamos con algo similar en nuestro marco de pruebas de unidades caseras (un clon de NUnit).
Oh, espera, ahora que estoy leyendo tu pregunta nuevamente, si realmente quieres resultados para cada afirmación exitosa, tendrás que profundizar más en la plomería. El TestRunner solo recibe una llamada por cada inicio / fin de la versión de prueba, por lo que contará las pruebas aprobadas y no aprobadas, no las aserciones.
Esto no es un gran problema para mí, ya que tienden a una afirmación por prueba, en general.
¿Estás realmente interesado en una afirmación que tiene éxito? Normalmente, las únicas afirmaciones interesantes son las que fallan.
Siendo ferviente devoto de JUnit, intento que la salida de las pruebas sea lo más silenciosa posible porque mejora la relación señal-ruido cuando algo no pasa. La mejor ejecución de prueba es aquella en la que todo pasa y no hay un pío de stdout.
Siempre puede trabajar en su prueba de unidad hasta que tenga éxito y ejecutar "grep Assert test.java | wc -l". :-)
Puede usar AOP (con Spring o AspectJ) definir puntos de corte en todos los métodos assert en junit.framework.Assert class. Utilizando la primavera puedes implementar tu propia clase como después de devolver el consejo ( http://static.springframework.org/spring/docs/2.5.x/reference/aop.html#aop-advice-after-returning) que solo se llamará si el método assert pasó (de lo contrario arroja una excepción: junit.framework.AssertionFailedError). En tu propia clase puedes implementar un contador simple e imprimirlo al final.
Si desea ver algún resultado para cada aserción exitosa, otro enfoque simple que no requiere dependencias externas o código fuente, sería definir su propia clase Assert que delegue todos los métodos a la clase JUnit Assert estándar, así como registrar aserciones exitosas ( las afirmaciones fallidas serán informadas como de costumbre por la clase JUnit).
A continuación, ejecuta una búsqueda y reemplazo global en sus clases de prueba desde "org.junit.Assert" => "com.myco.test.Assert", que debe arreglar todas las declaraciones de importación estáticas y regulares.
También podría migrar fácilmente su enfoque al más tranquilo-es-mejor-campamento y cambiar la clase contenedora para solo informar el número total de aserciones aprobadas por prueba o por clase, etc.
No creo, el objetivo de JUnit es contar las afirmaciones coincidentes o imprimir más información detallada. Si las pruebas son atómicas, obtendrá la mayoría de la información allí. Entonces, revisaría mis pruebas.
También puede establecer un archivo de registro en JUnit. Es posible, pero disminuirá el rendimiento de la ejecución de prueba ...
Agregué información que me hubiera sido útil cuando quería que JUnit fuera más prolijo y tropecé con esta pregunta. Tal vez ayudará a otros probadores en el futuro.
Si está ejecutando JUnit desde Ant y desea ver qué pruebas se están ejecutando, puede agregar lo siguiente a su tarea:
<junit showoutput="true" printsummary="on" enabletestlistenerevents="true" fork="@{fork}" forkmode="once" haltonfailure="no" timeout="1800000">
Tenga en cuenta que showoutput, printsummary y enabletestlistenerevents son los que ayudaron, no los otros atributos de la tarea. Si configura esto, obtendrá resultados como:
Running com.foo.bar.MyTest
junit.framework.TestListener: tests to run: 2
junit.framework.TestListener: startTest(myTestOne)
junit.framework.TestListener: endTest(myTestOne)
junit.framework.TestListener: startTest(myTestTwo)
junit.framework.TestListener: endTest(myTestTwo)
Tests run: 2, Failures: 0, Errors: 0, Time elapsed: 0.495 sec
Esto fue útil para mí cuando mis pruebas se agotaron y no estaba seguro de qué pruebas realmente llevaban demasiado tiempo, y qué pruebas se cancelaron porque tuvieron la mala suerte de correr cuando se acabó el tiempo.