2008-09-24 16 views
6

Estoy tratando de 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. En concreto, el objetivo ejecuta una tarea a ejecutar algunas pruebas unitarias, y quiero emitir un mensaje que indica que se dispone de los resultados:¿Ejecutar incondicionalmente una tarea en hormiga?

<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 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 <testng> tarea, 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 respuesta a continuación mediante la tarea parece que podría ser lo que quiero ..

+0

¿Cuál es su atributo haltonfailure establecido? – toolkit

Respuesta

4

La solución a su problema es utilizar el failureProperty en conjunción con la propiedad haltOnFailure de la tarea TestNG así:

<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 se desea que la compilación falla se agrega código de hormigas como esto :

<target name="doSomethingIfTestsWereSuccessful" unless="tests.failed"> 
    ... 
</target> 

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

a continuación, puede llamar doSomethingIfTestsFailed dónde quiere que su construcción ant falle.

+0

Necesitaba agregar una dependencia en doSomethingIfTestsFailed, pero funcionó. ¡Gracias! –

5

De acuerdo con la Ant docs, hay dos propiedades que controlan si el proceso de construcción se detiene o no si falla la tarea TestNG:

haltonfailure - Detenga el proceso de compilación si se ha producido un error durante la ejecución de la prueba . El valor predeterminado es falso.

haltonskipped - Detenga el proceso de compilación si al menos se omite la prueba. Predeterminado a falso.

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

Además, asumiendo que usted está utilizando la funcionalidad <ejecutivo> en Ant, hay propiedades similares a controlar lo que ocurre si falla el comando ejecutado:

FailOnError - Parar el buildprocess si el comando con un código de retorno falla de señalización. El valor predeterminado es falso.

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

no puede decir basa en el fragmento de código parcial en su puesto, pero mi conjetura es que el culpable más probable es FailOnError o haltonfailure se establece en true.

5

Se puede utilizar un bloque de try-catch así:

<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> 
0

A pesar de que están mostrando una tarea falsa llamada "TestNG" en su ejemplo que 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 caso de una falla de prueba.

Hay una manera de decirle a la hormiga que detenga la compilación en un error o falla de un junit utilizando los atributos de detención, por ejemplo. haltonfailure:

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

Sin embargo, tanto haltonfailure y haltonerror son de forma predeterminada se establece en off. 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

+1

En realidad, testng no es un objetivo falso. Estoy usando TestNG en lugar de JUnit, pero la idea es la misma. –

0

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

Cuestiones relacionadas