2

我想调用 JUnitCore 的 RunNotifier。它称为 fNotifier,在 JUnitCore 类中启动。来源:

https://github.com/KentBeck/junit/blob/master/src/main/java/org/junit/runner/JUnitCore.java

我能以某种方式通过反射得到这个吗,或者有没有其他方法可以调用这个 RunNotifier。

我想用他的pleaseStop()方法。

4

2 回答 2

2

使用反射不是最好的方法,但你可以这样做:

public static void main(String[] args) throws Exception {
    Computer computer = new Computer();

    JUnitCore jUnitCore = new JUnitCore();
    Field field = JUnitCore.class.getDeclaredField("fNotifier");
    field.setAccessible(true);
    RunNotifier runNotifier = (RunNotifier) field.get(jUnitCore);
    runNotifier.pleaseStop();
    jUnitCore.run(computer, BeforeAfterTest.class, AssertionErrorTest.class);
}

这将抛出org.junit.runner.notification.StoppedByUserException

如果您想要更多的灵活性或控制,执行上述操作的更好方法是将您想要的位从 JUnitCore 复制到您的类中,然后您可以直接控制通知器和侦听器等。这是最好的方法来做到这一点。JUnitCore 并没有真正设计为扩展。

于 2012-04-10T11:54:31.917 回答
1

使用 JUnit 4.1.2,字段名称已更改为 'notifier :

 Field field = JUnitCore.class.getDeclaredField("notifier");
于 2015-01-18T08:12:26.507 回答