Question

J'essaie de définir une tâche qui émet (à l'aide d'écho) un message lorsqu'une cible termine son exécution, que cette cible ait réussi ou non. Plus précisément, la cible exécute une tâche pour exécuter des tests unitaires et je souhaite émettre un message indiquant où les résultats sont disponibles:

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

Malheureusement, si les tests échouent, la tâche échoue et l'exécution échoue. Donc, le message n'est émis que si les tests réussissent - le contraire de ce que je veux. Je sais que je peux placer la tâche avant la tâche, mais cela permettra aux utilisateurs de rater plus facilement ce message. Est-ce que ce que j'essaie de faire est possible?

Mise à jour: Il s'avère que je suis stupide. J'avais haltOnFailure = & "True &"; dans mon < testng > tâche, ce qui explique le comportement que je voyais. Maintenant, le problème est que définir ce paramètre à false entraîne la réussite de la construction de la fourmi dans son ensemble, même si les tests échouent, ce qui n'est pas ce que je veux. La réponse ci-dessous en utilisant la tâche ressemble à ce que je veux peut-être.

Était-ce utile?

La solution

La solution à votre problème consiste à utiliser le failureProperty en conjonction avec la propriété haltOnFailure de la tâche de test comme ceci:

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

Ensuite, ailleurs, lorsque vous souhaitez que la construction échoue, vous ajoutez un code ant tel que celui-ci:

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

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

Vous pouvez ensuite appeler doSomethingIfTestsFailed où vous voulez que votre génération de fourmis échoue.

Autres conseils

Vous pouvez utiliser un bloc try-catch comme suit:

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

Selon les Docs Ant , deux propriétés permettent de contrôler si le processus de construction est arrêté ou non en cas d'échec de la tâche de test:

  

haltonfailure - Arrêtez le processus de génération.   si une panne est survenue pendant la   essai. La valeur par défaut est false.

     

haltonskipped : arrêtez le processus de génération.   s'il y a au moins un test sauté.   La valeur par défaut est false.

À partir de l'extrait, je ne peux pas dire si vous définissez cette propriété ou non. Cela vaut peut-être la peine d'essayer de définir explicitement haltonfailure sur false s'il est actuellement défini sur true.

En outre, en supposant que vous utilisez le < exec > fonctionnalité dans Ant, il existe des propriétés similaires pour contrôler ce qui se passe si la commande exécutée échoue:

  

failonerror - Arrêtez le processus de construction si la commande se ferme avec un code retour.   échec de signalisation. La valeur par défaut est false.

     

failifexecutionfails : arrêtez la génération si vous ne pouvez pas démarrer le programme.   La valeur par défaut est true.

Je ne peux pas le savoir en fonction de l'extrait de code partiel dans votre message, mais je suppose que le coupable le plus probable est failonerror ou haltonfailure étant défini sur true. / p>

Bien que vous montriez une fausse tâche appelée " testng " dans votre exemple, je suppose que vous utilisez la cible Junit.

Dans ce cas, il est étrange que vous voyiez ces résultats car la cible Junit n'abandonne PAS par défaut l'exécution en cas d'échec du test.

Il existe un moyen de dire à ant de mettre fin à la construction suite à une erreur ou à une erreur du junit en utilisant les attributs stop, par exemple. haltonfailure :

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

Cependant, haltonfailure et haltonerror sont tous deux désactivés. Je suppose que vous pourriez vérifier votre fichier de construction pour voir si l'un de ces drapeaux a été défini. Ils peuvent même être définis globalement, vous pouvez donc essayer de le définir explicitement sur & "No &"; sur votre tâche pour vous assurer qu’elle est remplacée au cas où elle serait définie dans la portée globale.

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

Pouvez-vous lancer la tâche de test? Si tel est le cas, vous pouvez utiliser cette fonctionnalité pour que la tâche de test s'exécute sur une autre machine virtuelle.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top