2010-04-22 158 views
9

我有我試圖從main方法如下因素代碼運行測試類:JUnitCore.runClasses不打印任何東西

Result r = org.junit.runner.JUnitCore.runClasses(TestReader.class); 

當我檢查結果的對象,我可以看到5測試已經運行,但屏幕上沒有打印任何內容。

我應該做些什麼來獲得輸出嗎?

回答

3

這樣做並不是一個很乾淨的方法,因爲這不是一件常見的事情。如果您要創建可用於在命令行上運行測試的程序,並且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

+0

你能例子,爲什麼,「這不是做一個普通的事情。」在食譜中描述調用runClasses。如果還有另一種方式去做,它是什麼? – cmcginty 2011-02-09 19:38:35

+0

你唯一一次調用'runClasses()'是,如果你正在編寫你自己的代碼來運行測試。通常,您將JUnitCore作爲主類,從IDE運行測試,或者使用構建系統中構建的內容來運行測試。如果您需要編寫自定義類來運行測試,通常的方法是使用org.junit.runner.notification.RunListener'。就我個人而言,我一直在爲需要在JUnit4中做些事情多少次而感到煩惱,並且發現內部類是唯一的解決方案。 – NamshubWriter 2011-02-10 14:46:36

20

是的,你應該註冊TextListener這樣的:

JUnitCore junit = new JUnitCore(); 
    junit.addListener(new TextListener(System.out)); 
    junit.run(TestReader.class); 
+0

JUnit 4.11在歸檔中沒有附帶TextListener。在這種情況下我該做什麼? – djangofan 2012-12-14 00:36:07

+1

@djangofan:它是4.11中的org.junit.internal.TextListener。 – 2013-11-09 15:40:46

+0

'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