Frage

Ich versuche, eine Aufgabe zu definieren, die eine Nachricht aussendet (echo), wenn eine Ziel Ausführung abgeschlossen ist, unabhängig davon, ob das Ziel erfolgreich war oder nicht. Insbesondere führt das Ziel, eine Aufgabe, einige Unit-Tests laufen zu lassen, und ich möchte eine Nachricht auszusenden, die anzeigt, wo die Ergebnisse sind verfügbar:

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

Leider, wenn die Tests fehlschlagen, ist die Aufgabe fehlschlägt und die Ausführung abbricht. So ist die Nachricht nur dann ausgegeben, wenn die Tests bestehen - das Gegenteil von dem, was ich will. Ich weiß, dass ich die Aufgabe, vor der Aufgabe stellen kann, aber das wird es einfacher für die Benutzer diese Nachricht zu verpassen. Ist das, was ich versuche möglich zu tun?

Update: Es stellt sich heraus, dass ich dumm bin. Ich hatte haltOnFailure = „true“ in meiner Aufgabe, die das Verhalten erklärt ich sah. Nun ist die Frage, dass dies auf falsche Einstellung bewirkt, dass der Gesamt-Ant Build erfolgreich zu sein, auch wenn Tests fehlschlagen, das ist nicht das, was ich will. Die Antwort unter der Aufgabe, unter Verwendung sieht aus wie es auch sein mag, was ich will ..

War es hilfreich?

Lösung

Die Lösung für Ihr Problem ist es, die failureProperty in Verbindung mit der haltOnFailure Eigenschaft der testng Aufgabe wie folgt zu verwenden:

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

Dann anderswo, wenn Sie das Build zu wollen scheitern Sie ant Code wie folgt hinzu:

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

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

Sie können dann doSomethingIfTestsFailed nennen, wo Sie Ihre Ant Build wollen zum Scheitern verurteilt.

Andere Tipps

Sie können eine try-catch wie so blockieren:

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

Nach dem Ant docs gibt es zwei Eigenschaften, die festlegen, ob der Build-Prozess gestoppt wird oder nicht, wenn die testng Aufgabe fehlschlägt:

  

haltonfailure - Stoppen Sie den Build-Prozess   falls ein Fehler während der aufgetreten   Testlauf. Der Standardwert ist false.

     

haltonskipped - Stoppen Sie den Build-Prozess   wenn es zumindest auf übersprungenen Test.   Standard auf false gesetzt.

Ich kann nicht aus dem Snippet sagen, wenn Sie diese Eigenschaft sind einstellen oder nicht. einen Versuch wert, um explizit gesetzt haltonfailure auf false kann, wenn es zur Zeit auf true gesetzt wird.

Auch vorausgesetzt, Sie die verwenden Funktionalität in Ant gibt es ähnliche Eigenschaften zu kontrollieren, was passiert, wenn der ausgeführte Befehl fehlschlägt:

  

FailOnError - stoppen Sie die buildprocess wenn der Befehl endet mit einem Return-Code   Signalisierungsausfall. Der Standardwert ist false.

     

failifexecutionfails - Stoppen Sie den Build, wenn wir das Programm nicht starten kann.   Standardwert ist true.

Kann nicht auf dem Teilcodeschnipsel in Ihrem Beitrag tell basiert, aber meine Vermutung ist, dass die wahrscheinlichste Ursache ist FailOnError oder haltonfailure auf true gesetzt werden.

Auch wenn Sie eine gefälschte Aufgabe zeigen in Ihrem Beispiel genannt „testng“ Ich nehme an, Sie das junit Ziel verwenden.

In diesem Fall ist es merkwürdig Sie diese Ergebnisse sehen, weil das junit Ziel standardmäßig nicht abgebrochene Ausführung auf einem Testfehler.

Es gibt einen Weg, um tatsächlich Ameise sagt die Build auf einem junit Ausfall oder Fehler zu stoppen, indem Sie den Stillstand mit Attributen, z. B. haltonfailure :

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

Doch sowohl haltonfailure und haltonerror sind standardmäßig ausgeschaltet. Ich nehme an, Sie könnten Ihre Build-Datei überprüfen, um zu sehen, ob eine dieser beiden Flags gesetzt wurden. Sie können sogar global gesetzt werden, so dass man, was man versuchen könnte, ist explizit, es auf Ihrer Aufgabe zu „Nein“ um sicherzustellen, dass es für den Fall außer Kraft gesetzt wird im globalen Bereich festgelegt ist.

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

Können Sie die testng Aufgabe Gabel? Wenn ja, dann wollen Sie vielleicht diese Funktion verwenden, so dass die testng Aufgabe auf einer anderen JVM ausgeführt wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top