Java測試框架比較:TestNG VS JUnit 4

jopen 11年前發布 | 72K 次閱讀 TestNG JUnit 4 單元測試

TestNG和JUnit是針對Java語言的兩個比較常用的測試框架。JUnit出現的比較早,但是早期的JUnit 3對測試代碼有非常多的限制,使用起來很不方便,后來的JUnit 4得到很大的改進。TestNG的出現介于JUnit 3和JUnit 4,但是TestNG在很多方面還要優于JUnit 4。下面從整體上對TestNG和JUnit 4進行比較全面的比較。

TestNG與JUnit的相同點:

       1. 使用annotation,且大部分annotation相同。

       2. 都可以進行單元測試(Unit test)。

       3. 都是針對Java測試的工具。

TestNG與JUnit的不同點:

      1. JUnit只能進行單元測試,TestNG可以進行單元測試,功能測試,端到端測試,集成測試等。

      2. TestNG需要一個額外的xml配置文件,配置測試的class、method甚至package。

      3. TestNG的運行方式更加靈活:命令行、ant和IDE,JUnit只能使用IDE。

      4. TestNG的annotation更加豐富,比如@ExpectedExceptions、@DataProvider等。

      5. 測試套件運行失敗,JUnit 4會重新運行整個測試套件。TestNG運行失敗時,會創建一個XML文件說明失敗的測試,利用這個文件執行程序,就不會重復運行已經成功的測試。

TestNG比JUnit 4靈活性的體現:

      1. JUnit 4中必須把@BeforeClass修飾的方法聲明為public static,這就限制了該方法中使用的變量必須是static。而TestNG中@BeforeClass修飾的方法可以跟普通函數完全一樣。

      2. JUnit 4測試的依賴性非常強,測試用例間有嚴格的先后順序。前一個測試不成功,后續所有的依賴測試都會失敗。TestNG 利用@Test 的dependsOnMethods屬性來應對測試依賴性問題。某方法依賴的方法失敗,它將被跳過,而不是標記為失敗。

      3. 對于n個不同參數組合的測試,JUnit 4要寫n個測試用例。每個測試用例完成的任務基本是相同的,只是受測方法的參數有所改變。TestNG的參數化測試只需要一個測試用例,然后把所需要的參數加到TestNG的xml配置文件中。這樣的好處是參數與測試代碼分離,非程序員也可以修改參數,同時修改無需重新編譯測試代碼。

      4. 為了測試無法用String或原語值表示的復雜參數化類型,TestNG提供的@DataProvider使它們映射到某個測試方法。

      5. JUnit 4的測試結果通過Green/Red bar體現,TestNG的結果除了Green/Red bar,還有Console窗口和test-output文件夾,對測試結果的描述更加詳細,方便定位錯誤。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!