Pregunta

Actualmente estoy usando JUnit 4 y tengo la necesidad de dividir mis pruebas en grupos que se pueden ejecutar de forma selectiva en cualquier combinación. Sé que TestNG tiene una función para anotar pruebas para asignarlos 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. He comprobado los dos documentos de JUnit y he buscado en la web, pero no pude encontrar nada. ¿Alguien está al tanto de un TestRunner?

Actualización: Gracias por sus respuestas con respecto a las suites de prueba. Debería haber abordado esto en mi pregunta original. Aquí vamos: no quiero usar suites de prueba porque me exigirían que las creara y las administre 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 de unidad en varios 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 + corredor de prueba de JUnit personalizado).

¿Fue útil?

Solución

Echa un vistazo a las SpringJUnit4ClassRunner . Lo he usado para ejecutar, opcionalmente, pruebas basadas en una propiedad del sistema, utilizando IfProfileValue anotación.

Esto:

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

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

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

Otros consejos

JUnit no tiene tal corredor en este momento. Para resolver el problema subyacente, nuestra necesidad más alta de desarrollo para el próximo lanzamiento es la necesidad de obtener una seguridad razonable de un conjunto de pruebas en un tiempo limitado. 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 sesgado.

Primero, está abordando dos problemas: pruebas de unidad (a menudo en el mismo paquete que la unidad bajo prueba) y pruebas de integración. Normalmente guardo mis pruebas de integración en un paquete separado, algo como com.example.project.tests. En eclipse, mis proyectos se ven como:

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

Al hacer clic con el botón derecho en un paquete y seleccionar "Ejecutar" se ejecutan las pruebas en el paquete; haciendo lo mismo en la carpeta de origen ejecuta todas las pruebas.

Puede lograr un efecto similar, aunque expresó un desinterés en él, utilizando Suite runner . Sin embargo, esto infringe la SECA; debe mantener actualizadas las copias de los nombres de las pruebas en las clases de la suite. 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 de 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>

Desafortunadamente, no hay un concepto similar a los grupos de TestNG. Se planificó para JUnit4, pero por alguna razón poco clara, se eliminó de la planificación.

Puedes crear suites, aunque eso pone toda la configuración en la suite, y no en las anotaciones.

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

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

TestNG tiene mi voto. Se basa en anotaciones, se puede ejecutar como Grupos, Pruebas individuales, etc., se puede vincular a Maven y se pueden ejecutar todas las pruebas JUnit como parte de sus pruebas.

Lo recomiendo ampliamente a JUnit.

mi consejo es simplemente deshacerse de JUnit y usar TestNG. Una vez que te acostumbras a TestNG, Junit se parece a la Edad de Piedra.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top