java unit-testing ant

java - ¿Ejecutar incondicionalmente una tarea en hormiga?



install junit eclipse (5)

Puedes usar un bloque try-catch como ese:

<target name="myTarget"> <trycatch property="foo" reference="bar"> <try> <testing outputdir="${results}" ...> ... </testing> </try> <catch> <echo>Test failed</echo> </catch> <finally> <echo>Tests complete. Results available in ${results}</echo> </finally> </trycatch> </target>

Intento definir una tarea que emita (usando eco) un mensaje cuando un objetivo complete la ejecución, independientemente de si ese objetivo fue exitoso o no. Específicamente, el objetivo ejecuta una tarea para ejecutar algunas pruebas unitarias, y deseo emitir un mensaje que indique dónde están disponibles los resultados:

<target name="mytarget"> <testng outputDir="${results}" ...> ... </testng> <echo>Tests complete. Results available in ${results}</echo> </target>

Desafortunadamente, si las pruebas fallan, la tarea falla y la ejecución aborta. Entonces, el mensaje solo se emite si pasan las pruebas, lo contrario de lo que deseo. Sé que puedo poner la tarea antes de la tarea, pero esto hará que sea más fácil para los usuarios perder este mensaje. ¿Es lo que estoy tratando de hacer posible?

Actualización: Resulta que soy tonto. Tenía haltOnFailure = "true" en mi tarea <testng>, lo que explica el comportamiento que estaba viendo. Ahora el problema es que establecer esto en falso hace que la compilación general de hormigas tenga éxito incluso si fallan las pruebas, que no es lo que quiero. La siguiente respuesta con la tarea parece que podría ser lo que quiero ...


La solución a su problema es usar el failureProperty junto con la propiedad haltOnFailure de la tarea de prueba de esta manera:

<target name="mytarget"> <testng outputDir="${results}" failureProperty="tests.failed" haltOnFailure="false" ...> ... </testng> <echo>Tests complete. Results available in ${results}</echo> </target>

Luego, en otro lugar cuando quieras que la compilación falle, agregas un código ant como este:

<target name="doSomethingIfTestsWereSuccessful" unless="tests.failed"> ... </target> <target name="doSomethingIfTestsFailed" if="tests.failed"> ... <fail message="Tests Failed" /> </target>

A continuación, puede llamar a doSomethingIfTestsFailed donde desee que falle su build de ant.


Aunque está mostrando una tarea falsa llamada "testng" en su ejemplo, supongo que está utilizando el objetivo junit.

En este caso, es extraño que vea estos resultados porque el objetivo junit por defecto NO aborta la ejecución en una falla de prueba.

Hay una manera de decirle realmente a la hormiga que detenga la construcción en una falla o error de un junit usando los atributos de detención, ej. Haltonfailure :

<target name="junit" depends="junitcompile"> <junit printsummary="withOutAndErr" fork="yes" haltonfailure="yes">

Sin embargo, tanto haltonfailure como haltonerror están desactivados por defecto. Supongo que podría verificar su archivo de compilación para ver si se han configurado alguno de estos indicadores. Incluso se pueden establecer globalmente, por lo que una cosa que podría intentar es establecer explícitamente en "no" en su tarea para asegurarse de que se anula en caso de que se establezca en el ámbito global.

http://ant.apache.org/manual/Tasks/junit.html


De acuerdo con los documentos Ant , hay dos propiedades que controlan si el proceso de compilación se detiene o no si la tarea de prueba falla:

Haltonfailure : detiene el proceso de compilación si se ha producido un error durante la prueba. El valor predeterminado es falso.

haltonskipped : detiene el proceso de compilación si al menos se ha omitido la prueba. Predeterminado a falso.

No puedo decir desde el fragmento si está configurando esta propiedad o no. Puede valer la pena intentar establecer explícitamente haltonfailure en falso si está configurado actualmente como verdadero.

Además, suponiendo que esté utilizando la funcionalidad <exec> en Ant, existen propiedades similares para controlar lo que sucede si falla el comando ejecutado:

failonerror : detiene el proceso de compilación si el comando sale con una falla de señalización del código de retorno. El valor predeterminado es falso.

failifexecutionfails - Detenga la compilación si no podemos iniciar el programa. El valor predeterminado es verdadero.

No puedo decir en función del fragmento de código parcial en su publicación, pero creo que el culpable más probable es failonerror o haltonfailure establecido en true.


¿Puedes bifurcar la tarea de prueba? Si es así, entonces, es posible que desee utilizar esa función para que la tarea de prueba se ejecute en una JVM diferente.