2012-04-19 64 views
4

使用JUnit 4,我的ant構建腳本調用與任務的junit始終將測試類名稱報告爲「未知」。有沒有解決這個問題的方法,不涉及從TestCase派生?JUnit 4 @Test註解將測試名稱報告爲「未知」

我宣佈我的測試方法與@Test標註,如:

SomeTest.java:

public class SomeTest { 
    @Test 
    public void doSomething() { .. } 
} 

和一些測試程序將它們彙總:

AllTests.java:

@RunWith(Suite.class) 
@Suite.SuiteClasses({ 
    SomeTest.class 
}) 
public class AllTests { 
} 

然後我通過NetBeans調用ant任務,它具有很好的集成支持用於打印JUnit運行的結果。一切似乎都發現,除了測試的名稱總是「不知道」,例如:

6 tests passed, 2 tests failed, 2 tests caused an error (8.4s) 
com.mystuff.AllTests FAILED 
    Unknown passed (0.0s) 
    Unknown passed (0.0s) 
    Unknown passed (0.0s) 
    Unknown passed (0.0s) 
    Unknown passed (0.0s) 
    Unknown passed (0.0s) 
    Unknown FAILED (0.0s) 
    Unknown caused an ERROR: at org.hibernate.somethingorother.java:1234 (0.0s) 
    ..etc.. 

測試正常運行,我通常都能弄清楚從被記錄的堆棧跟蹤故障點,但一切都被報告爲「未知「只是令人煩惱和愚蠢。

在閱讀了幾篇SO帖子之後,我發現有兩種方法來設置測試,從TestCase派生舊的JUnit 3方法,以及使用@Test註釋的新Junit 4方法。

Not able to execute tests with @Test annotation when my test extends TestCase(Junit) in Eclipse

JUnit confusion: use 'extends TestCase' or '@Test'?

和這個職位提到了「在JUnit 4測試類不再擴展了一個公共框架類,所以沒有繼承方法GetName任何更多的」 How to obtain test case name in JUnit 4 at runtime?

我試着從TestCase擴展了我的測試用例,這確實能夠正確報告名稱,但是這個單獨的更改摧毀了它的一些生命週期,並且測試以bizzarre方式失敗。我的理解是,當JUnit跑步者看到你的測試類是從TestCase派生出來的時候,它會將它作爲JUnit 3測試用例運行,因此會忽略所有的@Before,@After等註釋。我沒有看到重新進入JUnit 3測試機制的重點。

回答

7

這是令人尷尬的,但值得一說。我想我只回答了我自己的問題。

答案似乎是一個任務屬性,enableTestListenerEvents,描述如下:http://ant.apache.org/manual/Tasks/junit.html

我忽視了它,因爲文檔說「因爲螞蟻1.8.2 - 螞蟻1.7.0至1.8.1表現爲如果這個屬性默認爲true。「而且我運行的是1.8.2,但是我誤解了它,實際上它是在1.8.2中默認關閉的。

所以修復方法就是改變我的任務中的build.xml:

<junit haltonfailure="true" printsummary="on" fork="yes" dir="."> 

<junit haltonfailure="true" printsummary="on" fork="yes" dir="." 
    enableTestListenerEvents="true"> 

的NetBeans現在打印在測試結果窗格上,以在矩信息,包括測試名稱,隨着測試的進行。整個反饋經驗更加豐富。告訴你的朋友:)