Pregunta

Estoy tratando de definir una tarea que emite (usando echo) un mensaje cuando un objetivo completa 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 quiero 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 se cancela. Por lo tanto, el mensaje solo se envía si pasan las pruebas, lo contrario de lo que quiero. Sé que puedo poner la tarea antes que la tarea, pero esto facilitará que los usuarios pierdan este mensaje. ¿Es posible lo que intento hacer?

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

¿Fue útil?

Solución

La solución a su problema es usar failureProperty junto con la propiedad haltOnFailure de la tarea testng como esta:

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

Luego, cuando quieras que falle la compilación, agrega un código de hormiga como este:

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

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

Luego puede llamar a doSomethingIfTestsFailed donde desea que falle su compilación de hormigas.

Otros consejos

Puede usar un bloque try-catch de esta manera:

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

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

  

haltonfailure : detiene el proceso de compilación   si ha ocurrido una falla durante el   prueba de funcionamiento. Por defecto es falso.

     

haltonskipped : detiene el proceso de compilación   si hay al menos una prueba omitida.   Por defecto a falso.

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

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

  

failonerror : detiene el proceso de compilación si el comando sale con un código de retorno   falla de señalización. Por defecto es falso.

     

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

No se puede determinar en función del fragmento de código parcial en su publicación, pero supongo que el culpable más probable es que failonerror o haltonfailure se establezcan en verdadero.

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 destino de la unión por defecto NO aborta la ejecución en una falla de prueba.

Hay una manera de decirle a la hormiga que detenga la compilación en un error o falla de la unión 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 como haltonerror están desactivados de manera predeterminada. Supongo que puede verificar su archivo de compilación para ver si se ha establecido alguno de estos indicadores. Incluso se pueden configurar globalmente, por lo que una cosa que podría intentar es establecerlo explícitamente en & Quot; no & Quot; en su tarea para asegurarse de que se anule en caso de que se establezca en el ámbito global.

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

¿Puedes bifurcar la tarea de prueba? En caso afirmativo, es posible que desee utilizar esa función para que la tarea de prueba se ejecute en una JVM diferente.

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