2010-06-21 58 views
0

如果有人編寫新的單元測試,但忘記將其添加到套件中,即使稍後有人打破測試,連續構建也將繼續愉快地通過。有沒有辦法發現未包含在套件中的JUnit測試?查找任何套件中未包含的JUnit 3測試?

編輯
我知道我可以移動到JUnit 4中,但接下來的問題是,如何找到那個失蹤@Test標註測試?

+0

缺少@Test註釋的測試不是JUnit4中的測試。 – topchef 2010-06-23 03:18:15

+0

@grigory當然,但這是一個很常見的錯誤。 – 2010-06-23 12:46:51

+0

我的觀點是,使用JUnit 3時,您的問題非常合適:如何查找不屬於任何測試套件的測試(從測試開始並屬於TestCase的子類的方法)。有了JUnit 4,問題就變成了:如何找到不是測試的測試。 – topchef 2010-06-23 16:44:38

回答

1

移動到junit4?

+0

並不總是可能的。有一些測試框架,例如GWT測試,這取決於TestCase。 – 2010-06-21 20:59:52

+0

和人們可能仍在使用JDK 1.4 ... – topchef 2010-06-23 16:41:57

1

我會做到以下幾點:

  1. 使用的findgrep某種組合來提取應該測試類名字的列表;例如對於包含extend TestCase的文件,請使用grep

  2. 在測試報告上使用findgrep的一些組合來提取實際運行的測試類的列表。

  3. 對兩個列表進行排序並使用diff進行比較。

存在誤報和漏報的風險;例如不直接延伸到TestCase的測試班可能會通過網絡。但這種方法會給你一個快速的「第一切」答案。

1

使用TestSuite.tests()你就可以生產的測試名單(遞歸)包含在測試套件(列表1)和使用Java反射,你可以生產所有測試的列表(從擴展TestCase類)(列表2)。

然後減去list1 from list2生成不包含在任何套件中的測試列表。

運行此Java程序時,類路徑應包含所有測試類。

1

我建議不要手動創建測試套件。相反,請確保您的構建自動運行您的「測試」目錄下的所有測試。 Ant支持使用<junit>元素來執行此操作。

您還可以創建一個套件,通過查找擴展TestCase的所有非抽象類來找到要運行的測試。您可以使用Reflections推出自己的反射套件,或者搜索免費實現(請參閱How do I programmatically run all the JUnit tests in my Java application?