如何访问当前的JUnitCore以添加侦听器?

时间:2009-08-19 21:49:42

标签: ant junit task

我有一些测试基础结构类,我想添加为JUnitCore的监听器,特别是testRunFinished。 我正在从ant的任务中调用Junit 4。

有没有办法让我可以访问由任务创建的JUnitCore,以便我可以添加一个监听器?

3 个答案:

答案 0 :(得分: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 :(得分:1)

@RunWith注释可能有所帮助(有一些次要的API最佳做法违规):您提供自己的Runner,并覆盖run(RunNotifier notifier)。通过RunNotifier,您可以使用add * Listener-API,该API目前仅标记为内部。祝你好运!

答案 2 :(得分:1)

这有点晚了,但您可以尝试将RunListener打包成蚂蚁的JUnitResultFormatter(来自org.apache.ant:ant-junit):

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/%3C86A2FB65A5F8B549A8E8939DC00F8269332B4A@exchange03.nexus.commercehub.com%3E