2009-03-11 18 views
22

Nos han migrado a la vez JUnit 4 y hormigas 1,7en ejecución "puros" JUnit 4 tests utilizando hormiga

Las pruebas funciona muy bien en eclipse, pero las anotaciones son ignorados al ejecutar las pruebas usando hormiga.

De acuerdo con la tarea Ant junit documentation:

También funciona con JUnit 4.0, incluyendo JUnit "pura" 4 pruebas utilizando sólo las anotaciones y sin JUnit4TestAdapter.

Pero la documentación no explica cómo se debe configurar.

¿Hay algún ajuste especial requerido para la tarea junit? ¿Me estoy perdiendo de algo? Tenemos ambas pruebas que extienden las pruebas TestCase (es decir, estilo 3.8) y Junit 4 "puro", ¿podría ser ese el problema?

Respuesta

14

Estoy usando pruebas de JUnit4 puro con Ant.

Aquí es la parte interesante de mi fichero de construcción:

<junit printsummary="yes" haltonfailure="yes"> 
    <formatter type="xml"/> 
    <classpath refid="path.test"/> 
    <batchtest fork="yes" todir="${dir.report.unittests.xml}"> 
     <fileset dir="src"> 
      <include name="**/*Test*.java"/> 
     </fileset> 
    </batchtest> 
</junit> 

Asegúrese de tener la última versión del archivo junit.jar en el directorio lib de la hormiga. Por lo que yo sé, la versión requerida se entrega con ant 1.7 o versiones superiores ...

+2

Así que no hay forma de evitar tener que usar un patrón de nomenclatura para clases de prueba (como "* Test.java") aunque JUnit 4 no requiere ¿ese? – Jonik

+0

@jonik No tiene que usar un patrón de nomenclatura, pero le ayudará a evitar ejecutar JUnit frente a cualquier clase adicional que pueda tener y que no contenga pruebas que estén en el mismo paquete que sus clases de prueba. Las clases como esta darán errores en la salida JUnit. – MikeD

+3

¿Qué sucede si tiene clases de utilidad que tienen Test al principio pero que no son clases de prueba? Por lo general, "usar JUnit 4" significa "las pruebas de las marcas de anotación @Test, no el nombre de la clase". Debería ser posible incluir todos los archivos .java y que solo ejecute los que tengan pruebas. – Trejkaz

0

Esta es la parte relevante de mi script genérico ant ... no estoy seguro si eso te ayudará o no ...

<junit fork="true" 
     forkmode="once" 
     haltonfailure="false" 
     haltonerror="false" 
     failureproperty="tests.failures" 
     errorproperty="tests.errors" 
     includeantruntime="true" 
     showoutput="true" 
     printsummary="true"> 
    <classpath> 
     <path refid="path-id.test.classpath.run"/> 
    </classpath> 

    <formatter type="xml"/> 

    <batchtest fork="yes" 
       todir="${dir.build.testresults}"> 
     <fileset dir="${dir.src.tests}"> 
      <include name="**/*Test.java"/> 
     </fileset> 
    </batchtest> 
</junit> 
-1

Lo que terminé haciendo fue agregar un Ant a una de mis definiciones que usa la tarea>. Et voila.

0

Aplicar esta anotación a las otras clases org.junit.Ignore

1

Verificar su definición ruta de clase ... esto solucionó mi problema.

<path id="classpath" description="Classpath do Projeto"> 
    <fileset dir="${LIB}"> 
     <include name="**/*.jar" /> 
     <exclude name="**/.SVN/*.*"/> 
    </fileset> 
</path> 
2

Esto me pasó a mí y fue porque estaba usando anotaciones y extendiendo TestCase.

public class TestXXX extends TestCase { 

    @Test 
    public void testSimpleValidCase() { 
     // this was running 
    } 

    @Test 
    public void simpleValidCase() { 
     // this wasn't running 
    } 
} 

Cuando extiende TestCase usted está asumiendo el estilo JUnit3 por lo anotaciones junit4 se ignoran.

La solución es dejar de extender TestCase.

6

Ant se envía con una versión de JUnit 3 de manera predeterminada. JUnit 3 no tiene soporte para anotaciones de prueba.

Para usar las anotaciones JUnit 4 de la tarea junit, asegúrese de proporcionar la ubicación de un jar JUnit 4 en un elemento classpath anidado de la tarea junit (consulte this entry in the ant FAQ).

<junit showoutput="yes" fork="true"> 
    <classpath> 
     <!-- The location of the JUnit version that you want to use --> 
     <pathelement location="lib/junit-4.9b1.jar"/> 
    </classpath> 

    <formatter type="plain" usefile="false" /> 

    <batchtest> 
     <fileset dir="${tests.dir}"/> 
    </batchtest> 
</junit> 

Ésta es una solución preferible a sobrescribir la hormiga-junit.jar en ANT_HOME/lib ya que significa que puede mantener su tarro de JUnit en el control de código fuente junto con el código de hacer actualizaciones a versiones posteriores sencillos.

Tenga en cuenta que si bien no he especificado ningún patrón de inclusión en mi conjunto de archivos, esto significa que la tarea junit intentará ejecutar JUnit contra todas las clases en esa estructura de directorio, lo que puede dar como resultado que se incluyan varias clases no contiene ninguna prueba según cómo haya estructurado sus archivos fuente.

+0

Tengo exactamente el mismo problema en Debian: hormiga 1.8.0, junit 4.10, el classpath al junit-4.10.jar agregado como parte de la tarea junit y, sin embargo, la anotación @Task no es reconocida, solo renombrar los métodos para comenzar con test * funciona ... –

+0

@ MenelaosPerdikeas ¿Quiso decir '@ Task'? Esperaría que estés usando '@ Test' como anotación. Suponiendo que está utilizando '@ Test' intente ejecutar ant con el distintivo -v y el resultado de la tarea junit mostrará un classpath. A continuación, puede asegurarse de que la ruta de clase junit-4.10.jar que agregó a la tarea esté presente. Encontré -v realmente útil cuando trato de diagnosticar este problema. – MikeD

+0

Tenía exactamente este elemento '' a excepción de la opción 'fork =" true "'. Agregar esa opción lo resolvió para mí. – Darkhogg

3

Finalmente, solo puede encontrar y ejecutar pruebas con el parámetro skipNonTests agregado en la hormiga 1.9.3+.

Este es el fragmento de código de la respuesta aceptada anteriormente (a excepción de los nuevos skipNonTests parámetros y deshacerse de la "Prueba" en el requisito de nombre de archivo):

<junit printsummary="yes" haltonfailure="yes"> 
    <formatter type="xml"/> 
    <classpath refid="path.test"/> 
    <batchtest skipNonTests="true" fork="yes" todir="${dir.report.unittests.xml}"> 
     <fileset dir="src"> 
      <include name="**/*.java"/> 
     </fileset> 
    </batchtest> 
</junit> 
+0

Sí, es genial que finalmente hayan agregado esto. Ahora, si pudieran arreglar todo lo demás en Ant, Ant podría convertirse en una buena herramienta. Jaja. – Trejkaz

0

También probé a hacer pruebas con JUnit 4.0 sin JUnit4TestAdapter, es decir, sin el método
public static junit.framework.Test suite() { return new JUnit4TestAdapter (SomeTestClass.class); }

Uso hormiga 1.9.4. Ejecución de prueba hormiga prolijo (-v hormiga) muestra

[junit] La ejecución de múltiples pruebas en el mismo VM
[junit] /usr/share/java/junit.jar:/usr/sharejava/ Implícitamente añadiendo hormiga-launcher.jar: /usr/share/java/ant.jar: /usr/share/java/ant/ant-junit.jar a ClassPath

Aha, pero todavía hay algo de hormigas junit- tarea. Al descargar esto, también se muestra /usr/share/java/ant/ant-junit4.jar, que no se agrega implícitamente. Acabo de añadir explícitamente:

<junit printsummary="yes" 
    fork="yes" 
    forkmode="once" 
    maxmemory="1023m" 
    showoutput="no"> 
    ... 
    <classpath> 
    <pathelement path="...:${junitJar}:${hamcrestJar}:/usr/share/java/ant/ant-junit4.jar" /> 
    </classpath> 
... 
</junit> 

y funcionó. Sin: no. Soy consciente de que esta solución no es bonita en absoluto ...

Cuestiones relacionadas