機能していることを確認できる唯一の方法は、<test>
要素の複数のインスタンスを持つことです。
<test>
これに関する問題は、実行するメソッドを要素ごとに指定する必要があることです。静的初期化子と 2 つのテストを含む単一のテスト クラスを作成しました。次の<junit>
タスクで、私はあなたが望むことをすることができました:
<junit fork="yes">
<classpath>
<path refid="classpath" />
</classpath>
<formatter type="xml"/>
<test name="TestSimple" methods="testOne" toDir="firstRun" />
<test name="TestSimple" methods="testTwo" toDir="secondRun" />
</junit>
ビルド ログから得た情報から、それらが 2 つの異なる JVM で実行されたことは明らかです。
test:
...
[junit] Executing 'C:\Program Files\Java\jdk1.7.0_25\jre\bin\java.exe' with arguments:
[junit] '-classpath'
...
[junit] 'org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner'
[junit] 'TestSimple'
[junit] 'methods=testOne'
...
[junit] Executing 'C:\Program Files\Java\jdk1.7.0_25\jre\bin\java.exe' with arguments:
[junit] '-classpath'
...
[junit] 'org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner'
[junit] 'TestSimple'
[junit] 'methods=testTwo'
...
[junit] Test TestSimple FAILED
System.out
また、各テストのレポートで静的イニシャライザに入れたステートメントも確認できます。
ここでの重要な詳細は、属性を使用して各<test>
タグがレポートを別のディレクトリにリダイレクトするようにするtoDir
か、属性を使用して出力ファイルの名前を変更する必要があることですoutfile
。これは、レポート ファイル名が、実行中のメソッドではなく、クラスの名前を使用しているためです。つまり、2 回目の実行で最初の実行のレポートが上書きされます。
特定のケースでは、同じ JVM で問題なく実行できるすべてのテストに a を使用し、タグを<batchtest>
追加して問題のあるテストの実行を回避できます。<exclude>
次に、<test>
問題のあるテストごとに特定のタグを追加します。
これは、methods
属性が特定のメソッドを再実行するか、実行が遅すぎる別のテストを実行するように特別に設計されているためです。ドキュメントから:
メソッド属性は、次のシナリオで役立ちます。
- テスト メソッドが失敗し、テスト メソッドを再実行して修正をテストするか、Java デバッガーでテストを再実行する必要があります。他の (実行時間が長い可能性がある) テスト メソッドが完了するのを待つ必要はありません。
- 1 つまたは複数のテスト メソッドの実行が予想よりも遅く、Java プロファイラーでそれらを再実行したい (他のテスト メソッドが実行されている間にプロファイラーを実行するオーバーヘッドがない場合)。
しかし、個人的には、以前にあなたと同じ問題に遭遇した人から来て、静的初期化子は最悪です! できるだけ早くそれらを取り除くために一生懸命努力します。そして、@PeterNiederwieser を引用すると、テスト セットごとに新しい JVM を使用すると、テスト スイートの実行が非常に遅くなります。