TestNG與JUnit的嘴仗似乎告一段落了,Gunjan Doshi今天發(fā)布了一個(gè)"JUnit 4.0 in 10 Minutes: A Quick Reference Guide",學(xué)習(xí)筆記如下。
注:所有代碼和插圖都來(lái)自于原文。
首先來(lái)看看JUnit4.0以前,我們?cè)鯓泳帉?xiě)測(cè)試用例:

- 測(cè)試用例必須繼承自"junit.framework.TestCase";
- 測(cè)試用例函數(shù)必須以"test"開(kāi)頭;
- 用assert的系列函數(shù)來(lái)驗(yàn)證結(jié)果。
如果用JUnit4.0重寫(xiě),將是這個(gè)樣子:

- 不用再繼承自"junit.framework.TestCase",TestNG批評(píng)JUnit的一個(gè)方面就是在JUnit中,每一個(gè)測(cè)試用例都會(huì)實(shí)例化一份TestCase,帶來(lái)效率的降低。JUnit4.0確實(shí)修改了這樣的設(shè)計(jì)。
- 測(cè)試函數(shù)名稱不用再以"test"開(kāi)頭,而用Annotation"@Test"來(lái)修飾;
- assert系列函數(shù)沒(méi)有大的改變;
- 如果希望用老的JUnit Runner來(lái)運(yùn)行JUnit4.0的測(cè)試用例,需要用Junit4TestAdapter來(lái)Adapt一下。
- 或者可以用新的JUnit4的Runner來(lái)運(yùn)行。
- java org.junit.runner.JUnitCore LibraryTest
其中,用"@Test" Annotation來(lái)修飾測(cè)試用例是JUnit4.0的一個(gè)大Feature,這也正是這種Metadata應(yīng)該發(fā)揮作用的地方。
"@Test"有兩個(gè)非常有用的參數(shù):
1) 預(yù)期會(huì)拋出的異常檢測(cè)
"@Test"的"expected"參數(shù)用來(lái)說(shuō)明希望拋出的異常,如果運(yùn)行時(shí)沒(méi)有拋出這個(gè)異常,測(cè)試用例就被標(biāo)識(shí)為失敗。
2) 預(yù)期運(yùn)行時(shí)間
"@Test"有一個(gè)timeout的參數(shù)用來(lái)說(shuō)明這個(gè)測(cè)試用例運(yùn)行的時(shí)間最長(zhǎng)應(yīng)該為多少,如果時(shí)間超出,則標(biāo)識(shí)為失敗。
- @Test (timeout=10)
TestNG批評(píng)JUnit的另一個(gè)方面是所有的測(cè)試用例函數(shù)都會(huì)在測(cè)試執(zhí)行前執(zhí)行setUp,在測(cè)試后執(zhí)行tearDown,不僅效率很低,也會(huì)帶來(lái)很多問(wèn)題(比如一次性的數(shù)據(jù)庫(kù)鏈接等等)。
JUnit4.0這樣解決這個(gè)問(wèn)題:
引入Annotation"Before", "After", "BeforeClass", "AfterClass"。
"Before"修飾的函數(shù)將會(huì)在每個(gè)測(cè)試運(yùn)行前運(yùn)行,"After"修飾的函數(shù)將在每個(gè)測(cè)試用例運(yùn)行后運(yùn)行。JUnit4.0支持任意數(shù)量的"Before"和"After" Annotation,并且支持繼承。"Before"修飾函數(shù)的執(zhí)行順序?yàn)楦割惖脑谇?,繼承類在后,"After"則相反,繼承類在前,父類在后。

"BeforeClass"修飾的函數(shù)將會(huì)在所有的測(cè)試用例運(yùn)行前運(yùn)行一次(只運(yùn)行一次), "AfterClass"則會(huì)在所有的測(cè)試用例運(yùn)行后運(yùn)行一次(只運(yùn)行一次)。

JUnit4.0還有一個(gè)有用的Annotation "@Ignore",它用來(lái)修飾將被忽略的函數(shù),用"@Ignore"修飾的測(cè)試用例函數(shù)將不會(huì)執(zhí)行。這個(gè)Annotation支持一個(gè)字符串參數(shù),用來(lái)說(shuō)明忽略的原因,比如:
- @Ignore(“Database is down”)
TestNG則采用配置文件的辦法解決這個(gè)問(wèn)題,兩種方法各有利弊。
Reference:
JUnit 4.0 in 10 Minutes: A Quick Reference Guide [PDF] - Gunjan Doshi
注:所有代碼和插圖都來(lái)自于原文。
Popularity: 24%
Related entries:


)".


