單元測(cè)試的重要性是不言而喻的。但如果沒(méi)有好的單元測(cè)試工具,是無(wú)法激起開(kāi)發(fā)人員的欲望。
Testng便是利器之一。TestNG是基于Annotation的測(cè)試框架的先驅(qū),他擁有通過(guò)添加諸如靈活的裝置、測(cè)試分類(lèi)、參數(shù)測(cè)試和依賴(lài)方法等特性來(lái)克服JUnit3的一些不足之處。下面我將總結(jié)一些TestNg的重要特性。
關(guān)于testng.xml
Testng.xml是以xml記錄所有測(cè)試的文件。它描述了測(cè)試套件的運(yùn)行時(shí)定義,也是testng中運(yùn)行測(cè)試的大工作單元。雖然沒(méi)有testng.xml文件,測(cè)試也很容易被執(zhí)行。但是隨著測(cè)試代碼的增長(zhǎng),testng.xml提供了方便用來(lái)存放所有運(yùn)行時(shí)的配置,如設(shè)置有關(guān)類(lèi),測(cè)試,方法,參數(shù),分組的包含與排除等。在測(cè)試類(lèi)越來(lái)越多時(shí),它顯得非常重要。
Testing.xml的主要結(jié)構(gòu)
根標(biāo)簽是<suite>
<suite>標(biāo)簽包含一個(gè)或多個(gè)<test>標(biāo)簽
<test>標(biāo)簽包含一個(gè)或多個(gè)<classes>標(biāo)簽
<classes>標(biāo)簽包含一個(gè)或多個(gè)<method>標(biāo)簽
一般來(lái)說(shuō),大多數(shù)文件詳細(xì)到<classes>標(biāo)簽即可。
Testing.xml的額外標(biāo)簽
<packages>和<package>:顧名思義,它們可以指定一組java包,在這個(gè)標(biāo)簽中還可以用包含<include>或者排除<exclude>屬性。
<parameter>定義了參數(shù)名稱(chēng)和值,它的使用是與測(cè)試類(lèi)當(dāng)中@Parameters的注釋結(jié)合使用的,作用和@Dataprovider類(lèi)似,提供外部參數(shù),功能不如@Dataprovider強(qiáng)大,有局限性。
<suite-files>和<suite-file>:它是用來(lái)引入其他testng.xml文件的,這些文件將于當(dāng)前文件一起執(zhí)行。
<groups>,<define>和<run>:這三個(gè)標(biāo)簽結(jié)合使用,在執(zhí)行時(shí)用來(lái)指定或者排除一部分的分組,以一個(gè)例子見(jiàn)分曉:
<groups>
<define name=”all”>
<include name=”test1”/>
<exclude name=”test2”/>
</define>
<run>
<include name=”all”/>
</run>
<groups>
注意執(zhí)行測(cè)試的默認(rèn)順序是按照testng.xml里給定的順序執(zhí)行的。如果你不希望按此順序執(zhí)行,請(qǐng)使用preserve-order屬性指定為false。如<test name="Regression1" preserve-order="false">。關(guān)于testng.xml的標(biāo)簽詳細(xì)說(shuō)明,可參見(jiàn)testng.xml的官方文檔。
在實(shí)際開(kāi)發(fā)時(shí),我建議testng.xml以功能點(diǎn)為粒度進(jìn)行劃分。然后以總的testng.xml將各個(gè)功能點(diǎn)的配置匯總起來(lái)。
參數(shù)傳遞
Testng改進(jìn)了傳統(tǒng)測(cè)試框架無(wú)法傳遞參數(shù)的缺點(diǎn),它能夠提供了想測(cè)試方法傳遞參數(shù)的簡(jiǎn)單兩種的方法:
1,在測(cè)試方法上加@Parameters標(biāo)簽,然后在testng.xml給出參數(shù)。
2,指定@Dataproviders。
第一種方式的缺點(diǎn)很明顯,它只支持java基本類(lèi)型,并且在構(gòu)造值時(shí),無(wú)法包含計(jì)算邏輯得到需要的參數(shù)。
第二種方式可以想測(cè)試方法傳遞任何有效的java類(lèi)型。我們傾向于第二種方法來(lái)構(gòu)造參數(shù)。
在此,我們?cè)俳榻B一種傳遞參數(shù)的方式:工廠注釋@Factory,它不同于前面兩種參數(shù)傳遞。
讓我們回顧一下普通的testng測(cè)試,這些測(cè)試類(lèi)是無(wú)參數(shù)構(gòu)造方法(默認(rèn)構(gòu)造方法,無(wú)法接受參數(shù))的。@Factory的出現(xiàn),正是彌補(bǔ)這一缺陷而產(chǎn)生的。@Factory的方法在執(zhí)行時(shí)會(huì)被首先檢查并執(zhí)行,且只執(zhí)行一次。執(zhí)行完以后返回一個(gè)Object數(shù)組。這個(gè)數(shù)組里對(duì)象的內(nèi)容便是當(dāng)前測(cè)試方法帶了構(gòu)造函數(shù)的實(shí)例。在使用@Factory的同時(shí),該測(cè)試類(lèi)還有一個(gè)對(duì)應(yīng)帶參數(shù)的構(gòu)造函數(shù),@Factory是為以構(gòu)造函數(shù)提供參數(shù)的形式提供了幫助。