我有我試圖從main方法如下因素代碼運行測試類:JUnitCore.runClasses不打印任何東西
Result r = org.junit.runner.JUnitCore.runClasses(TestReader.class);
當我檢查結果的對象,我可以看到5測試已經運行,但屏幕上沒有打印任何內容。
我應該做些什麼來獲得輸出嗎?
我有我試圖從main方法如下因素代碼運行測試類:JUnitCore.runClasses不打印任何東西
Result r = org.junit.runner.JUnitCore.runClasses(TestReader.class);
當我檢查結果的對象,我可以看到5測試已經運行,但屏幕上沒有打印任何內容。
我應該做些什麼來獲得輸出嗎?
這樣做並不是一個很乾淨的方法,因爲這不是一件常見的事情。如果您要創建可用於在命令行上運行測試的程序,並且JUnitCore本身可以執行此操作,則只需要輸出該輸出。
所有選項都涉及在內部程序包中使用類。
Result r = JUnitCore.runMain(new RealSystem(), TestReader.class.getName())
如果你要打印到比System.out
其他的東西,你可以創建自己的org.junit.internal.JUnitSystem
子類,並用它來代替RealSystem
您還可以使用org.junit.internal.TextListener
。舉例來說,參見runMain(JUnitSystem system, String... args)
的the JUnitCore source。
是的,你應該註冊TextListener
這樣的:
JUnitCore junit = new JUnitCore();
junit.addListener(new TextListener(System.out));
junit.run(TestReader.class);
JUnit 4.11在歸檔中沒有附帶TextListener。在這種情況下我該做什麼? – djangofan 2012-12-14 00:36:07
@djangofan:它是4.11中的org.junit.internal.TextListener。 – 2013-11-09 15:40:46
'runClasses(...)'方法創建一個新的'JUnitCore',這樣偵聽器就會丟失(參見[github中的代碼](https://github.com/junit-team/junit4/blob/a832c5afe5b0e7c2590d057a1a49a344d207f8a0/src /main/java/org/junit/runner/JUnitCore.java#L62))。這就是爲什麼你應該使用'run()'來代替。 – ecerulm 2017-10-30 09:47:44
你能例子,爲什麼,「這不是做一個普通的事情。」在食譜中描述調用runClasses。如果還有另一種方式去做,它是什麼? – cmcginty 2011-02-09 19:38:35
你唯一一次調用'runClasses()'是,如果你正在編寫你自己的代碼來運行測試。通常,您將JUnitCore作爲主類,從IDE運行測試,或者使用構建系統中構建的內容來運行測試。如果您需要編寫自定義類來運行測試,通常的方法是使用org.junit.runner.notification.RunListener'。就我個人而言,我一直在爲需要在JUnit4中做些事情多少次而感到煩惱,並且發現內部類是唯一的解決方案。 – NamshubWriter 2011-02-10 14:46:36