6

ターゲットが成功したかどうかに関係なく、ターゲットの実行が完了したときに (echo を使用して) メッセージを送信するタスクを定義しようとしています。具体的には、ターゲットはいくつかの単体テストを実行するタスクを実行し、結果が利用可能な場所を示すメッセージを出力したいと考えています。

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

残念ながら、テストが失敗すると、タスクは失敗し、実行は中止されます。したがって、メッセージはテストに合格した場合にのみ出力されます-私が望むものとは反対です。タスクをタスクの前に置くことができることはわかっていますが、これにより、ユーザーがこのメッセージを見逃しやすくなります。私がやろうとしていることは可能ですか?

更新:私は頭が悪いことがわかりました。<testng> タスクに haltOnFailure="true" がありました。これは、私が見た動作を説明しています。問題は、これを false に設定すると、テストが失敗しても全体的な ant ビルドが成功することです。これは私が望んでいるものではありません。タスクを使用した以下の回答は、私が望むもののように見えます..

4

5 に答える 5

5

Ant docsによると、testng タスクが失敗した場合にビルド プロセスを停止するかどうかを制御する 2 つのプロパティがあります。

haltonfailure - テストの実行中にエラーが発生した場合、ビルド プロセスを停止します。デフォルトは false です。

haltonskiped - スキップされたテストが少なくとも 1 つある場合、ビルド プロセスを停止します。デフォルトは false です。

このプロパティを設定しているかどうかは、スニペットからはわかりません。現在 true に設定されている場合は、haltonfailure を明示的に false に設定してみる価値があるかもしれません。

また、Ant で <exec> 機能を使用していると仮定すると、実行されたコマンドが失敗した場合に何が起こるかを制御する同様のプロパティがあります。

failonerror - コマンドがエラーを通知するリターン コードで終了した場合、ビルド プロセスを停止します。デフォルトは false です。

failifexecutionfails - プログラムを開始できない場合はビルドを停止します。デフォルトは true です。

あなたの投稿の部分的なコード スニペットに基づいて判断することはできませんが、私の推測では、最も可能性の高い原因は、 failonerrorまたはhaltonfailureがtrueに設定されていることです。

于 2008-09-24T16:51:27.767 に答える
5

次のようにtry-catchブロックを使用できます。

<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>
于 2008-09-24T16:52:01.650 に答える
4

問題の解決策は、次のように testng タスクfailurePropertyのプロパティと組み合わせて使用​​することです。haltOnFailure

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

次に、ビルドを失敗させたい場合は、次のような ant コードを追加します。

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

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

次に、ant ビルドを失敗させたい場所で doSomethingIfTestsFailed を呼び出すことができます。

于 2008-09-25T17:05:04.357 に答える
0

testngタスクをフォークできますか?はいの場合は、その機能を使用して、testngタスクが別のJVMで実行されるようにすることができます。

于 2008-09-24T18:16:15.910 に答える
0

あなたの例では「testng」と呼ばれる偽のタスクを示していますが、junit ターゲットを使用していると思います。

この場合、junit ターゲットはデフォルトでテストの失敗時に実行を中止しないため、これらの結果が表示されるのは奇妙です。

停止属性を使用して、junit の失敗またはエラーでビルドを停止するように実際に ant に指示する方法があります。停止失敗:

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

ただし、haltonfailurehaltonerrorはどちらもデフォルトでオフに設定されています。ビルド ファイルをチェックして、これらのフラグのいずれかが設定されているかどうかを確認できると思います。それらはグローバルに設定することもできるため、タスクで明示的に「いいえ」に設定して、グローバルスコープで設定された場合にオーバーライドされるようにすることを試みることができます。

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

于 2008-09-24T17:02:28.707 に答える