在實際的工作中,很多項目都沒有寫單元測試用例。寫單元測試用例常常是程序員十分厭倦的一個項目活動,很多人覺得沒有必要、浪費時間。所有這些都是因為沒有認識到測試的重要性:測試能夠使我們盡量早的發(fā)現程序的bug,一個bug被隱藏的時間越長,修復這個bug的代價越大。在《快速軟件開發(fā)》一書中已引用了大量的研究數據指出:后才修改一個bug的代價是在bug產生時修改它的代價的10倍。在現代軟件開發(fā)過程中,不管是xp還是rup都是十分重視單元測試,已經把單元測試作為貫穿整個開發(fā)周期的一項重要的開發(fā)活動。單元測試如此重要,那么怎樣寫好單元測試用例呢?這需要了解Junit及其相關的測試工具了。
1. Junit簡介:
1.1 內容摘要
Junit是由 Erich Gamma 和 Kent Beck 編寫的一個回歸測試框架(regressiontestingframework),供Java開發(fā)人員編寫單元測試之用。Junit測試是程序員測試,即所謂白盒測試。下面我們以一個簡單的例子來介紹如何使用Junit4同Junit3編寫測試用例:
先寫個簡單的被測試類:
public Class XXXX{
public String hello(){
return hello;
}
}
對于這個類的用junit3編寫測試用例:
import junit.framework.TestCase;
public Class XXXXTest extends TestCase{
public void testHello(){
asssertEqual(new XXXX().Hello(),hello);
}
}
用junit4編寫測試用例:
import static org.junit.framework.assertEqual;
import org.junit.Test;
public Class XXXXTest{
@Test
public void helloTest(){
asssertEqual(new XXXX().Hello(),hello);
}
}
從上面例子我們對Junit3和Junit4有了一個初步的印象,下面我們重點介紹Junit4與Junit3的主要區(qū)別。
1.2 Junit4與Junit3的主要區(qū)別
1.2.1 Junit4引入了java 5.0的注釋技術:
這兩個版本大的區(qū)別在JUnit3.x中測試必須繼承TestCase,并且每個方法名必須以test開頭。比如:testMethod1()而在JUnit4.x中不必繼承TestCase,采用了注解的方式。只要在測試的方法上加上注解@Test即可,從而不必再遵循以前的一些顯式約定和反射定位測試;在JUnit4.x中如果繼承了TestCase,注解不起作用了。并且有很重要的一點是在JUnit4.x中繼承了TestCase后,在OutLine視圖中測試單個方法時,結果整個類都run了。還有一點是,在3.x中需要實現setUp和tearDown方法,而在4.x中無需這樣,可以自定義需要在測試前和測試后的方法,在方法前加上@before,@after可以了。所以在JUnit4.x不必繼承TestCase用注解即可對單個方法進行測試。