docs - Ejecución de pruebas "puras" de JUnit 4 usando ant
junit software (9)
Hemos migrado a JUnit 4 y Ant 1.7.
Las pruebas funcionan bien en eclipse, pero las anotaciones se ignoran cuando se ejecutan las pruebas utilizando ant.
Según la documentation tarea Ant Junit:
También funciona con JUnit 4.0, incluidas las pruebas "puras" de JUnit 4 que usan solo anotaciones y no JUnit4TestAdapter.
Pero la documentación no explica cómo debe configurarse.
¿Hay algún ajuste especial requerido para la tarea junit? ¿Me estoy perdiendo de algo? Tenemos ambas pruebas que amplían TestCase (es decir, estilo 3.8) y pruebas "puras" de Junit 4, ¿podría ser ese el problema?
¡Finalmente, solo puede encontrar y ejecutar pruebas con el parámetro skipNonTests agregado en ant 1.9.3+!
Este es el fragmento de código de la respuesta aceptada anterior (a excepción del nuevo parámetro skipNonTests 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>
Ant se envía con una versión de JUnit 3 por defecto. JUnit 3 no tiene soporte para anotaciones de prueba.
Para usar las anotaciones de JUnit 4 de la tarea junit, asegúrese de proporcionar la ubicación de un archivo jar de JUnit 4 en un elemento de classpath anidado de la tarea junit (consulte esta entrada en la sección de Preguntas frecuentes de la hormiga ).
<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>
Esta es una solución preferible para sobrescribir el archivo ant-junit.jar en ANT_HOME / lib, ya que significa que puede mantener su jar de JUnit en el control de origen junto con su código, haciendo que las actualizaciones a versiones posteriores sean sencillas.
Tenga en cuenta que si bien no he especificado ningún patrón de inclusión en mi conjunto de archivos anterior, esto significa que la tarea junit intentará ejecutar JUnit contra todas las clases en esa estructura de directorios, lo que podría resultar en la inclusión de varias clases que no contienen Cualquier prueba dependiendo de cómo haya estructurado sus archivos de origen.
Aplicar esta anotación a las otras clases org.junit.Ignore
Esta es la parte relevante de mi script genérico de hormigas ... no estoy seguro de 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>
Esto me sucedió 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 extiendes TestCase, estás asumiendo el estilo JUnit3, por lo que las anotaciones JUnit4 se ignoran.
La solución es dejar de extender TestCase.
Estoy usando pruebas de JUnit4 puro con Ant.
Aquí está la parte interesante de mi archivo de compilació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 Ant. Por lo que sé, la versión requerida se entrega con ant 1.7 o versiones superiores ...
Lo que terminé haciendo fue agregar una Ant a una de mis definiciones que usa la tarea>. Et voila
También intenté hacer pruebas con JUnit 4.0 sin JUnit4TestAdapter, es decir, sin método
public static junit.framework.Test suite () {return new JUnit4TestAdapter (SomeTestClass.class); }
Yo uso la hormiga 1.9.4. Ejecución de la prueba de hormiga verbosa (ant -v) muestra
[junit] Ejecutando múltiples pruebas en la misma máquina virtual
[junit] Añadiendo implícitamente /usr/share/java/junit.jar:/usr/sharejava/ant-launcher.jar:/usr/share/java/ant.jar:/usr/share/java/ant/ant-ant-junit .jar a CLASSPATH
Ajá, pero todavía hay alguna tarea ant-junit. La descarga de esto muestra además /usr/share/java/ant/ant-junit4.jar que no se agrega de forma implícita. Acabo de añadirlo 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 nada hermosa ...
Verifique su definición de classpath ... esto resolvió mi problema.
<path id="classpath" description="Classpath do Projeto">
<fileset dir="${LIB}">
<include name="**/*.jar" />
<exclude name="**/.SVN/*.*"/>
</fileset>
</path>