我們可以看到,采用Annotation的JUnit已經(jīng)不會(huì)霸道的要求你必須繼承自TestCase了,而且測(cè)試方法也不必以test開頭了,只要以@Test元數(shù)據(jù)來描述即可。
從上面的例子可以看到在JUnit 4中還引入了一些其他的元數(shù)據(jù),下面一一介紹:
@Before:
使用了該元數(shù)據(jù)的方法在每個(gè)測(cè)試方法執(zhí)行之前都要執(zhí)行一次。
@After:
使用了該元數(shù)據(jù)的方法在每個(gè)測(cè)試方法執(zhí)行之后要執(zhí)行一次。
注意:@Before和@After標(biāo)示的方法只能各有一個(gè)。這個(gè)相當(dāng)于取代了JUnit以前版本中的setUp和tearDown方法,當(dāng)然你還可以繼續(xù)叫這個(gè)名字,不過JUnit不會(huì)霸道的要求你這么做了。
@Test(expected=*.class)
在JUnit4.0之前,對(duì)錯(cuò)誤的測(cè)試,我們只能通過fail來產(chǎn)生一個(gè)錯(cuò)誤,并在try塊里面assertTrue(true)來測(cè)試,F(xiàn)在,通過@Test元數(shù)據(jù)中的expected屬性。expected屬性的值是一個(gè)異常的類型
@Test(timeout=xxx):
該元數(shù)據(jù)傳入了一個(gè)時(shí)間(毫秒)給測(cè)試方法,
如果測(cè)試方法在制定的時(shí)間之內(nèi)沒有運(yùn)行完,則測(cè)試也失敗。
@ignore:
該元數(shù)據(jù)標(biāo)記的測(cè)試方法在測(cè)試中會(huì)被忽略。當(dāng)測(cè)試的方法還沒有實(shí)現(xiàn),或者測(cè)試的方法已經(jīng)過時(shí),或者在某種條件下才能測(cè)試該方法(比如需要一個(gè)數(shù)據(jù)庫聯(lián)接,而在本地測(cè)試的時(shí)候,數(shù)據(jù)庫并沒有連接),那么使用該標(biāo)簽來標(biāo)示這個(gè)方法。同時(shí),你可以為該標(biāo)簽傳遞一個(gè)String的參數(shù),來表明為什么會(huì)忽略這個(gè)測(cè)試方法。比如:@lgnore(“該方法還沒有實(shí)現(xiàn)”),在執(zhí)行的時(shí)候,僅會(huì)報(bào)告該方法沒有實(shí)現(xiàn),而不會(huì)運(yùn)行測(cè)試方法。
在Eclipse中使用JUnit4進(jìn)行單元測(cè)試(初級(jí)篇)
我們?cè)诰帉懘笮统绦虻臅r(shí)候,需要寫成千上萬個(gè)方法或函數(shù),這些函數(shù)的功能可能很強(qiáng)大,但我們?cè)诔绦蛑兄挥玫皆摵瘮?shù)的一小部分功能,并且經(jīng)過調(diào)試可以確定,這一小部分功能是正確的。但是,我們同時(shí)應(yīng)該確保每一個(gè)函數(shù)都完全正確,因?yàn)槿绻覀兘窈笕绻麑?duì)程序進(jìn)行擴(kuò)展,用到了某個(gè)函數(shù)的其他功能,而這個(gè)功能有bug的話,那是一件非常郁悶的事情。所以說,每編寫完一個(gè)函數(shù)之后,都應(yīng)該對(duì)這個(gè)函數(shù)的方方面面進(jìn)行測(cè)試,這樣的測(cè)試我們稱之為單元測(cè)試。傳統(tǒng)的編程方式,進(jìn)行單元測(cè)試是一件很麻煩的事情,你要重新寫另外一個(gè)程序,在該程序中調(diào)用你需要測(cè)試的方法,并且仔細(xì)觀察運(yùn)行結(jié)果,看看是否有錯(cuò)。正因?yàn)槿绱寺闊,所以程序員們編寫單元測(cè)試的熱情不是很高。于是有一個(gè)牛人推出了單元測(cè)試包,大大簡化了進(jìn)行單元測(cè)試所要做的工作,這是JUnit4。本文簡要介紹一下在Eclipse3.2中使用JUnit4進(jìn)行單元測(cè)試的方法。
首先,我們來一個(gè)傻瓜式速成教程,不要問為什么,F(xiàn)ollow Me,先來體驗(yàn)一下單元測(cè)試的快感!
首先新建一個(gè)項(xiàng)目叫JUnit_Test,我們編寫一個(gè)Calculator類,這是一個(gè)能夠簡單實(shí)現(xiàn)加減乘除、平方、開方的計(jì)算器類,然后對(duì)這些功能進(jìn)行單元測(cè)試。這個(gè)類并不是很完美,我們故意保留了一些Bug用于演示,這些Bug在注釋中都有說明。該類代碼如下:
package andycpp;
public class Calculator ...{
private static int result; // 靜態(tài)變量,用于存儲(chǔ)運(yùn)行結(jié)果
public void add(int n) ...{
result = result + n;
}
public void substract(int n) ...{
result = result - 1; //Bug: 正確的應(yīng)該是 result =result-n
}
public void multiply(int n) ...{
} // 此方法尚未寫好
public void divide(int n) ...{
result = result / n;
}
public void square(int n) ...{
result = n * n;
}
public void squareRoot(int n) ...{
for (; ;) ; //Bug : 死循環(huán)
}
public void clear() ...{ // 將結(jié)果清零
result = 0;
}
public int getResult() ...{
return result;
}
}