Как получить доступ к текущему JUnitCore, чтобы добавить слушателя? - PullRequest
6 голосов
/ 20 августа 2009

У меня есть несколько классов инфраструктуры тестирования, которые я хотел бы добавить в качестве прослушивателей JUnitCore, специально для testRunFinished. Я вызываю Junit 4 из задачи муравья.

Есть ли какой-нибудь способ для меня получить доступ к JUnitCore, созданному задачей, чтобы я мог добавить слушателя?

Ответы [ 3 ]

2 голосов
/ 08 сентября 2009

Не из задачи муравья.

Лучше всего написать основной метод, который запускает ваш набор тестов "вручную".

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 голос
/ 04 сентября 2015

Это немного поздно, но вы можете попробовать обернуть 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

1 голос
/ 16 сентября 2009

A @ RunWith может помочь аннотация (с некоторыми незначительными нарушениями API): вы предоставляете свой собственный Runner и переопределяете run(RunNotifier notifier). Через RunNotifier вы можете использовать add * Listener-API, который в настоящее время помечен как внутренний. Удачи!

...