Ant (1.8.2、junit4 サポート付き) からいくつかの Arquillian テストを実行しようとしていますが、Ant タスクは RunNotifier.fireTestRunFinished() を呼び出さず、Arquillian テスト ランナーはこれを頼りに arquillian-jmx 戦争をアンデプロイしているようです。コンテナから。JUnit の Eclipse 統合は fireRestRunFinished メソッドを呼び出し、そこからすべてが正しく機能します。
私はjunit javadocを見回して、RunNotifierでこれを見ました:
public void fireTestRunFinished(Result result)
Do not invoke.
さらに、クラスのjavadocの説明には次のように書かれています:
このクラスの将来の進化により、fireTestRunStarted(Description) と fireTestRunFinished(Result) は実行ごとに 1 回だけ呼び出される必要があるため、別のクラスに移動される可能性があります。
ただし、どこに移動するかは指定されていません。
junit のソースコードを調べたところ、fireTestRunFinished が呼び出される唯一の場所がこのメソッド内にあることがわかりました。
/**
* Do not use. Testing purposes only.
*/
public Result run(Runner runner) {
Result result= new Result();
RunListener listener= result.createListener();
fNotifier.addFirstListener(listener);
try {
fNotifier.fireTestRunStarted(runner.getDescription());
runner.run(fNotifier);
fNotifier.fireTestRunFinished(result);
} finally {
removeListener(listener);
}
return result;
}
ご覧のとおり、...呼び出さないでください。
私の質問は、すべてのテストの実行が終了したときにカスタム ランナーに通知することについて、JUnit は何をする予定ですか? この現在の API が使用されていない場合、他に利用できるものはありますか? 現在、私のオプションは、Arquillian ランナーを変更して RunListener に依存しないようにするか、Ant タスクで RunNotifier.fireTestRunFinished を呼び出すことです。いずれにせよ、所有していないコードを変更する必要があります...そして、それは明らかに私の最初の選択肢ではありません。
...または、Arquillian ランナーを拡張し、run() メソッドをオーバーライドして、super.run() の後に RunListener が行うことを行うことができます。
誰かがこれを回避する他の方法を見ていますか?