unitarias unitaria tutorial sintaxis pruebas prueba fail ejemplos configuracion con java unit-testing junit

java - unitaria - ¿Hay un JUnit TestRunner para ejecutar grupos de pruebas?



sintaxis junit (9)

Actualmente estoy usando JUnit 4 y tengo la necesidad de dividir mis pruebas en grupos que se pueden ejecutar selectivamente en cualquier combinación. Sé que TestNG tiene una función para anotar pruebas para asignarlas a grupos, pero no puedo migrar a TestNG en este momento. Parece que esto podría lograrse fácilmente en JUnit con algunas anotaciones personalizadas y un JUnit TestRunner personalizado. Revisé los documentos de JUnit y busqué en la web, pero no pude encontrar tal cosa. ¿Alguien está enterado de tal TestRunner?

Actualización: gracias por sus respuestas sobre suites de prueba. Debería haber abordado esto en mi pregunta original. Aquí vamos: no quiero usar suites de prueba porque me requerirían crearlas y administrarlas manualmente, lo que significa tocar TODAS mis pruebas y organizarlas en suites manualmente (demasiado trabajo y una pesadilla de mantenimiento). Todo lo que necesito hacer es ejecutar todas las pruebas unitarias, excepto algunas que realmente son pruebas de integración. Así que quiero anotar estos, y ejecutar todos los demás. En otras ocasiones, solo quiero ejecutar las pruebas de integración. También tengo la necesidad de poner una prueba unitaria en múltiples grupos, lo que no es posible con las suites. Espero que esto ayude a aclarar las cosas.

Actualización 2: si JUnit no tiene este OOB, estoy buscando una biblioteca de código abierto que agregue esto a JUnit (anotaciones + JUnit Test Runner personalizado).


Echa un vistazo a Spring''s SpringJUnit4ClassRunner . Lo he usado para ejecutar opcionalmente pruebas basadas en una propiedad del sistema, usando la anotación IfProfileValue .

Esta:

@IfProfileValue(name="test-groups", values={"unit-tests", "integration-tests"}) public void testWhichRunsForUnitOrIntegrationTestGroups() { // ... }

Se ejecutará si la propiedad del sistema ''test-groups'' está configurada en ''unit-tests'' o ''integration-tests''.

Actualización: JUnitExt tiene anotaciones @Category y @Prerequisite y parece que debería hacer lo que necesita. Sin embargo, nunca lo he usado, así que no puedo responderlo.


JUnit 3 le permite crear suites de prueba que se pueden ejecutar como cualquier otra prueba. ¿JUnit 4 no tiene un concepto similar?


JUnit no tiene ese corredor en este momento. Abordar el problema subyacente, la necesidad de obtener garantías razonables de un conjunto de pruebas en un tiempo limitado, es nuestra principal prioridad de desarrollo para el próximo lanzamiento. Mientras tanto, la implementación de un filtro que funciona a través de anotaciones parece que no sería un gran proyecto, aunque estoy predispuesto.


No, desafortunadamente no existe un concepto similar para los grupos TestNG. Se planeó para JUnit4, pero por algún motivo poco claro, se eliminó de la planificación.


Puede crear conjuntos, aunque eso coloca toda la configuración en el conjunto y no en las anotaciones.


Si está usando ANT o maven, puede controlar qué pruebas se ejecutan filtrando las pruebas por su nombre. Un poco incómodo, pero podría funcionar para ti.


TestNG tiene mi voto. Está basado en anotaciones, puede ejecutarse como Grupos, Pruebas individuales, etc., se puede vincular a Maven y puede ejecutar todas las pruebas de JUnit como parte de las ejecuciones de prueba.

Lo recomiendo por JUnit.


mi consejo es simplemente abandonar JUnit y usar TestNG. Una vez que te acostumbras a TestNG, Junit se parece a Stone Age.


En primer lugar, está abordando dos problemas: pruebas unitarias (a menudo en el mismo paquete que la unidad bajo prueba) y pruebas de integración. Por lo general, mantengo mis pruebas de integración en un paquete separado, algo así como com.example.project.tests. En eclipse, mis proyectos se ven así:

project/ src/ com.example.project/ tsrc/ com.example.project/ com.example.project.tests/

Al hacer clic derecho en un paquete y seleccionar ''ejecutar'' se ejecutan las pruebas en el paquete; haciendo lo mismo en la carpeta fuente ejecuta todas las pruebas.

Puede obtener un efecto similar, aunque haya expresado un desinterés por él, utilizando el corredor Suite . Sin embargo, esto viola el DRY: debe mantener copias de los nombres de las pruebas actualizadas en las clases del paquete. Sin embargo, puede poner fácilmente la misma prueba en varias suites.

@RunWith(Suite.class) @Suite.SuiteClasses( { TestAlpha.class, TestBeta.class }) public class GreekLetterUnitTests { }

Por supuesto, realmente debería mantener estas cosas automatizadas. Un buen método para hacerlo es usar la tarea Ant .

<target name="tests.unit"> <junit> <batchtest> <fileset dir="tsrc"> <include name="**/Test*.java"/> <exclude name="**/tests/*.java"/> </fileset> </batchtest> </junit> </target> <target name="tests.integration"> <junit> <batchtest> <fileset dir="tsrc"> <include name="**/tests/Test*.java"/> </fileset> </batchtest> </junit> </target>