如何获取当前JUnitCore的访问权限来添加监听器?

发布于 2024-08-02 19:29:00 字数 133 浏览 4 评论 0原文

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

有什么方法可以让我访问任务创建的 JUnitCore 以便添加侦听器吗?

I have some test infrastructure classes that I'd like to add as listeners of JUnitCore , specifically for testRunFinished.
I'm invoking Junit 4 from ant's task.

Is there some way for me to get access to the JUnitCore created by the task so that I can add a listener?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

浮云落日 2024-08-09 19:29:00

不是来自 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);
    }

}

Not from ant's junit task.

You best write a main method that runs your test suite "manually".

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);
    }

}
攀登最高峰 2024-08-09 19:29:00

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

A @RunWith annotation could help (with some minor API best-practice violations): you give your own Runner, and override run(RunNotifier notifier). Through the RunNotifier, you may use the add*Listener-API, which is marked as internal only currently. Good luck!

梦魇绽荼蘼 2024-08-09 19:29:00

这有点晚了,但您可以尝试将 RunListener 包装到 ant 的 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

This is a bit late, but you might try wrapping your RunListener into ant's JUnitResultFormatter (from 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)));
}

// ....

See https://mail-archives.apache.org/mod_mbox/ant-user/201009.mbox/%3C86A2FB65A5F8B549A8E8939DC00F8269332B4A@exchange03.nexus.commercehub.com%3E

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文