2009-08-19 20 views
5

私はJUnitCoreのリスナーとして、特にtestRunFinishedのために追加したいテストインフラストラクチャクラスをいくつか用意しています。 私はantのタスクからJunit 4を呼び出しています。現在のJUnitCoreにアクセスしてリスナーを追加するにはどうすればよいですか?

リスナーを追加できるように、タスクによって作成されたJUnitCoreにアクセスする方法はありますか?

答えて

2

antのjunitタスクからではありません。

"手動で"テストスイートを実行するメインメソッドを作成するのが最も適しています。

package test; 

import org.junit.runner.Request; 
import org.junit.runner.Result; 
import org.junit.runner.Runner; 
import org.junit.runner.notification.RunListener; 
import org.junit.runner.notification.RunNotifier; 

public class RollYourOwnTestRun { 

    public static void main(String[] args) { 
     Runner runner = Request.classes(StackTest.class).getRunner(); 
     RunNotifier notifier = new RunNotifier(); 
     Result result= new Result(); 
     RunListener listener= result.createListener(); 
     notifier.addListener(listener); 
     notifier.addListener(...); // add your listener 
     notifier.fireTestRunStarted(runner.getDescription()); 
     runner.run(fNotifier); 
     notifier.fireTestRunFinished(result); 
    } 

} 
1

@RunWith注釈は(いくつかのマイナーなAPIのベストプラクティスの違反を)助けることができる:あなたはあなた自身のランナーを与え、run(RunNotifier notifier)をオーバーライドします。 RunNotifierを使用すると、現在は内部のみとしてマークされているadd * Listener-APIを使用できます。がんばろう!

1

これは少し遅れているが、あなたはアリのJUnitResultFormatterorg.apache.ant:ant-junitから)にごRunListenerをラップしてみてください:

import static org.apache.tools.ant.taskdefs.optional.junit.JUnitVersionHelper.getTestCaseClassName; 
import static org.apache.tools.ant.taskdefs.optional.junit.JUnitVersionHelper.getTestCaseName; 
import static org.junit.runner.Description.createTestDescription; 

public class MyJunitFormatter implements JUnitResultFormatter { 

private final MyListener delegate = new MyListener(); 

@Override 
@SneakyThrows(Exception.class) 
public void endTest(Test test) { 
    delegate.testFinished(
      createTestDescription(
        getTestCaseClassName(test), 
        getTestCaseName(test))); 
} 

// .... 

https://mail-archives.apache.org/mod_mbox/ant-user/201009.mbox/%[email protected]cehub.com%3E

を参照してください。
関連する問題