TestNG和JUnit是針對Java語言的兩個比較經常使用的測試框架。JUnit出現的比較早,可是早期的JUnit 3對測試代碼有很是多的限制,使用起來很不方便,後來的JUnit 4獲得很大的改進。TestNG的出現介於JUnit 3和JUnit 4,可是TestNG在不少方面還要優於JUnit 4。下面從總體上對TestNG和JUnit 4進行比較全面的比較。
1.1 TestNG與JUnit的相同點:
- 使用annotation,且大部分annotation相同。
- 均可以進行單元測試(Unit test)。
- 都是針對Java測試的工具。
1.2 TestNG與JUnit的不一樣點:
- JUnit只能進行單元測試,TestNG能夠進行單元測試,功能測試,端到端測試,集成測試等,主要是由於testNG存在depends能夠進行測試用例的組合;
- TestNG須要一個額外的xml配置文件,配置測試的class、method甚至package。
- TestNG的運行方式更加靈活:命令行、ant和IDE,JUnit只能使用IDE。TestNG有本身的命令行執行方式。
- TestNG的annotation更加豐富和易懂,好比@ExpectedExceptions、@DataProvider等。
- 測試套件運行失敗,JUnit 4會從新運行整個測試套件。TestNG運行失敗時,會建立一個XML文件說明失敗的測試,利用這個文件執行程序,就不會重複運行已經成功的測試。
1.3 TestNG比JUnit 4靈活性的體現:
- JUnit 4中必須把@BeforeClass修飾的方法聲明爲public static,這就限制了該方法中使用的變量必須是static。而TestNG中@BeforeClass修飾的方法能夠跟普通函數徹底同樣。
- JUnit 4測試的依賴性很是強,測試用例間有嚴格的前後順序。前一個測試不成功,後續全部的依賴測試都會失敗。TestNG 利用@Test 的dependsOnMethods屬性來應對測試依賴性問題。某方法依賴的方法失敗,它將被跳過,而不是標記爲失敗。
- 對於n個不一樣參數組合的測試,JUnit 4要寫n個測試用例。每一個測試用例完成的任務基本是相同的,只是受測方法的參數有所改變。TestNG的參數化測試只須要一個測試用例,而後把所須要的參數加到TestNG的xml配置文件中。這樣的好處是參數與測試代碼分離,非程序員也能夠修改參數,同時修改無需從新編譯測試代碼。
- 爲了測試沒法用String或原語值表示的複雜參數化類型,TestNG提供的@DataProvider使它們映射到某個測試方法。
- JUnit 4的測試結果經過Green/Red bar體現,TestNG的結果除了Green/Red bar,還有Console窗口和test-output文件夾,對測試結果的描述更加詳細,方便定位錯誤。
1.4 總結
在TestNG包含了JUnit4的核心功能,而且遷移方便的狀況下,彷佛沒有理由不使用TestNg。程序員