aqubi+shin1

Recent site activity

JUnit


イベントリスナー

TestCaseが開始された・・・エラーが発生した・・・ などのタイミングをリスナーすることができます。
junit.framework.TestResult#addListener(TestListener listener)
・・・で。
このリスナーを使うことにより、テスト結果を取得することが出来るので、独自形式でレポート出力する事などが出来るようになります。

TestResultというクラスは テスト開始されるときに Runnerから渡されます。
junit.textui.TestRunner#doRun(Test suite, boolean wait)

どこで TestResultを取得して addListenerしたらいいか・・・ですが、実行TopのTestSuiteやTestCase などのクラスで
public void run(TestResult result)
を上書きしてしまえばOKかと。
public void run(TestResult result) {
   result.addListener(new MyTestListener());
   super.run(result);
}


TestListener には 以下のメソッドを実装します。
/**
* An error occurred.
*/
public void addError(Test test, Throwable t);
/**
* A failure occurred.
*/
public void addFailure(Test test, AssertionFailedError t);
/**
* A test ended.
*/
public void endTest(Test test);
/**
* A test started.
*/
public void startTest(Test test);

良く見てはないけど、Ant-JUnitのレポート出力も多分このリスナーでやってるのかと思います。

あ、注意点としては このリスナーへのイベント発火はjunit.framework.TestSuite のクラスはやってくれません。
もちろん junit.framework.TestCase はやってくれますが。

TestSuiteの時にもリスナーへイベント発火したい!って時には TestSuiteのクラスで
public void run(TestResult result) {
  result.startTest(this);
  super.run(result);
  result.endTest(this);
}

・・・と自分で イベント発火してあげましょぅ。