我想調用JUnitCore的RunNotifier。 它被稱爲fNotifier並在JUnitCore類中啓動。 來源:獲取JUnitCore的RunNotifier
https://github.com/KentBeck/junit/blob/master/src/main/java/org/junit/runner/JUnitCore.java
我可以通過反射得到這個不知何故,或有任何其他方式,我可以把這個RunNotifier。
我想用他的pleaseStop()
方法。
我想調用JUnitCore的RunNotifier。 它被稱爲fNotifier並在JUnitCore類中啓動。 來源:獲取JUnitCore的RunNotifier
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並沒有真正被設定爲可以擴展。
謝謝你的工作! – ctekk 2012-04-10 12:13:25
使用JUnit 4.1.2的字段名稱已更改爲「通知:
Field field = JUnitCore.class.getDeclaredField("notifier");
這是可能的(一般),並且可能需要反思,但你可以給我們介紹一下你想要什麼樣的一些具體細節去做?例如,你如何運行測試?從Eclipse,從命令行,從maven?另外,如果你可以提供一些關於你爲什麼要停止一個測試的細節,你可以通過在你的測試方法中拋出一個異常來做到這一點。 – 2012-04-10 11:24:35
我使用從命令行啓動的prog中的JUnitCore.run()來啓動它們。然後我想有一個選項,可以在不關閉我的編程的情況下停止執行。所以我想停止整個testrun不只是一個單一的測試。 – ctekk 2012-04-10 11:31:51