2012-04-10 24 views
1

我想調用JUnitCore的RunNotifier。 它被稱爲fNotifier並在JUnitCore類中啓動。 來源:獲取JUnitCore的RunNotifier

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

我可以通過反射得到這個不知何故,或有任何其他方式,我可以把這個RunNotifier。

我想用他的pleaseStop()方法。

+0

這是可能的(一般),並且可能需要反思,但你可以給我們介紹一下你想要什麼樣的一些具體細節去做?例如,你如何運行測試?從Eclipse,從命令行,從maven?另外,如果你可以提供一些關於你爲什麼要停止一個測試的細節,你可以通過在你的測試方法中拋出一個異常來做到這一點。 – 2012-04-10 11:24:35

+0

我使用從命令行啓動的prog中的JUnitCore.run()來啓動它們。然後我想有一個選項,可以在不關閉我的編程的情況下停止執行。所以我想停止整個testrun不只是一個單一的測試。 – ctekk 2012-04-10 11:31:51

回答

1

使用反射是不是最好的方法,但你可以做這樣的事情:

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並沒有真正被設定爲可以擴展。

+0

謝謝你的工作! – ctekk 2012-04-10 12:13:25

0

使用JUnit 4.1.2的字段名稱已更改爲「通知:

Field field = JUnitCore.class.getDeclaredField("notifier");