TestNG
TestNG是一個Java語言的測試框架,由Cédric Beust受到JUnit和NUnit的啟發而創建。TestNG的設計目標是,覆蓋更廣泛的測試類別範圍:單元測試、功能測試、端到端測試、集成測試等,並且功能更強大、更易於使用。
開發者 | Cédric Beust、TestNG團隊 |
---|---|
當前版本 | 6.12[1](2017年2月28日 ) |
源代碼庫 | |
編程語言 | Java |
操作系統 | 跨平台 |
類型 | 單元測試工具 |
許可協議 | Apache許可證2.0[2] |
網站 | http://testng.org/ |
功能
TestNG的主要功能包括:
- 支持註解。
- 支持參數化和數據驅動測試(用
@DataProvider
和/或XML配置)。 - 支持同一個類的多個實例(用
@Factory
)。 - 靈活的執行模式。TestNG的運行,既可以通過Ant的build.xml(有或沒有一個測試套定義),又可以通過帶有可視化效果的IDE插件。不需要
TestSuite
類,測試套件、測試組及選擇運行的測試,都通過XML文件來定義和配置。 - 並發測試:測試運行在任意大的線程池中,並有多種策略可選(所有方法都有他們自己的線程,或每個測試類一個線程,等等);測試代碼是否線程安全。
- 嵌入BeanShell可以獲得更大的靈活性。
- 默認的JDK運行時和日誌功能(無依賴)。
- 應用服務器測試的依賴方法。[需要解釋]
- 分布式測試:允許在從機上進行分布式測試。
數據提供者
TestNG中的數據提供者是測試類中的一個方法,該類為依賴測試方法提供了一個不同實際值的數組。
例如:
/**
* 本方法可为任何测试方法提供数据,只要声明测试方法的数据提供者名为
* “provider1”即可。
*/
@DataProvider( name = "provider1" )
public Object[][] createData1()
{
Object[][] objects = new Object[2][];
objects[0] = new Object[] { "Cedric", 36 };
objects[1] = new Object[] { "Anne", 37 };
return objects;
}
/**
* 本测试方法声明其数据应由名为“provider1”的数据提供者提供。
*/
@Test( dataProvider = "provider1" )
public void verifyData1( String s, Integer i )
{
System.out.println( s + ' ' + i );
}
/**
* 本数据提供者返回一个参数数组的迭代器。
*/
@DataProvider( name = "provider2" )
public Iterator<Object[]> createData()
{
return new MyIterator( ... );
}
/**
* 本数据提供者带有一个 java.lang.reflect.Method 类型的参数。如果多个测试方
* 法使用同一个提供者,而且你又希望它能根据不同的测试方法返回不同的值,本方
* 法就非常有用。
*/
@DataProvider( name = "provider3" )
public Object[][] createData( Method m )
{
System.out.println( m.getName() );
return new Object[][] { new Object[] { "Cedric" } };
}
數據提供者的返回值類型可以是以下兩種類型之一:
- 一個Object二維數組(
Object[][]
),其中第一維的大小是測試方法將被調用的次數,第二維的大小包含一個對象數組,對象數組必須與測試方法的參數類型一致。 - 一個Object迭代器(
Iterator<Object[]>
)。它與前一種類型的唯一區別是,迭代器可以讓你延遲創建你的測試數據。TestNG將先後調用該迭代器和測試方法,而測試方法的參數則由該迭代器依次返回。如果你有很多參數集要傳遞給測試方法,而你又不想事先把它們全部創建出來,這就非常有用了。
工具支持
TestNG既有現成軟件,又可以通過IDE插件來調用。目前三大主流Java IDE——Eclipse、IntelliJ IDEA和NetBeans——都有針對TestNG的插件。它也可以配置為Apache Ant的定製任務,並且支持Apache Maven構建系統。Hudson的持續集成服務器已經內建了對TestNG的支持,並能進行跟蹤,及隨時間推移對測試結果進行可視化。多數Java代碼覆蓋率工具,如Cobertura,都可以與TestNG無縫銜接。
測試報告
TestNG可以生成HTML和XML格式的測試報告。Ant的JUnitReport任務[3]可以轉換XML輸出,生成與使用JUnit時所獲得的類似的報告。從4.6版開始,TestNG還提供了一個報告API。[4]通過該API可以使用第三方的報告生成器,如ReportNG、[5]PDFngreport[6]和TestNG-XSLT。[7]
與JUnit的對比
TestNG和JUnit是兩個相似且相互競爭的Java工具,它們之間的差異及各自優勢已經討論了多年。兩大陣營都有強大的基礎和支持者。Stack Overflow的討論可以反映這一爭議。[8][9][10]
註解
在JUnit 4中,@BeforeClass和@AfterClass方法必須被聲明為靜態的。而TestNG沒有這個限制。
TestNG為套件、測試和組提供了四對額外的裝/卸註解,即@BeforeSuite和@AfterSuite,@BeforeTest和@AfterTest,@BeforeGroup和@AfterGroup,@BeforeMethod和@AfterMethod。
參數化測試
這兩個工具都實現了這個功能,但實現方式截然不同。
TestNG有兩種方式來為測試方法提供不同的參數值:設置testng.xml,及定義@DataProvider的方法。
在JUnit 4中,使用@RunWith和@Parameters一起來實現參數化測試,而@Parameters方法必須返回List[],它攜帶所有實際的值,這些值將作為參數被傳遞給專門的類構造器。
結論
JUnit常常被主流IDE默認支持,這有助於其更廣泛的普及。而TestNG的目標則更廣泛,不僅包括單元測試,還支持集成測試和驗收測試等。哪一個更好或更適合,取決於使用情況和要求。
參見
參考文獻
- ^ 存档副本. [2017-11-10]. (原始內容存檔於2019-02-18).
- ^ Apache License Version 2.0 [Apache許可證2.0版]. 2004年1月 [2017-11-10]. (原始內容存檔於2013-12-21) (英語).
- ^ JUnitReport. [2017-11-10]. (原始內容存檔於2010-02-24) (英語).
- ^ Announcing TestNG 4.6 [TestNG 4.6發布]. [2017-11-10]. (原始內容存檔於2010-12-12) (英語).
- ^ ReportNG 1.0 Final Released [ReportNG 1.0最終版發布]. [2017-11-10]. (原始內容存檔於2010-01-11) (英語).
- ^ PDFngreport 1.0.0. [2017-11-10]. (原始內容存檔於2015-07-26) (英語).
- ^ TestNG XSL Reports [TestNG XSL報告]. [2017-11-10]. (原始內容存檔於2013-03-07) (英語).
- ^ Junit vs TestNG [Junit對TestNG]. stackoverflow.com. [2017-11-10]. (原始內容存檔於2017-04-04) (英語).
- ^ JUnit vs TestNG [JUnit對TestNG]. stackoverflow.com. [2017-11-10]. (原始內容存檔於2014-02-02) (英語).
- ^ Which UnitTest framework to learn for Java now? [現在學Java用哪個測試框架?]. stackoverflow.com. [2017-11-10]. (原始內容存檔於2016-11-04) (英語).
外部連結
- TestNG主页. [2017-11-10]. (原始內容存檔於2017-11-09) (英語).
- Github上的TestNG. [2017-11-10]. (原始內容存檔於2017-08-01) (英語).
- TestNG 使 Java 单元测试轻而易举. 2005-01-06 [2017-11-10]. (原始內容存檔於2017-11-10).
- TestNG教程和示例. [2017-11-10]. (原始內容存檔於2017-10-20) (英語).
- TestNG的Selenium教程和示例. [2017-11-10]. (原始內容存檔於2017-11-10) (英語).
- TestNG介绍. [2017-11-10]. (原始內容存檔於2017-07-19) (英語).
- Selenium的TestNG框架. [2017-11-10]. (原始內容存檔於2017-05-10) (英語).
- 追求代码质量:JUnit 4 与 TestNG 的对比——为什么 TestNG 框架依然是大规模测试的较好选择?. 2006-09-18 [2017-11-10]. (原始內容存檔於2017-11-10).
- 线上的TestNG工作. [2017-11-10]. (原始內容存檔於2017-09-22) (英語).