我想调用 JUnitCore 的 RunNotifier。它称为 fNotifier,在 JUnitCore 类中启动。来源:
https://github.com/KentBeck/junit/blob/master/src/main/java/org/junit/runner/JUnitCore.java
我能以某种方式通过反射得到这个吗,或者有没有其他方法可以调用这个 RunNotifier。
我想用他的pleaseStop()
方法。
我想调用 JUnitCore 的 RunNotifier。它称为 fNotifier,在 JUnitCore 类中启动。来源:
https://github.com/KentBeck/junit/blob/master/src/main/java/org/junit/runner/JUnitCore.java
我能以某种方式通过反射得到这个吗,或者有没有其他方法可以调用这个 RunNotifier。
我想用他的pleaseStop()
方法。
使用反射不是最好的方法,但你可以这样做:
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 并没有真正设计为扩展。
使用 JUnit 4.1.2,字段名称已更改为 'notifier :
Field field = JUnitCore.class.getDeclaredField("notifier");