測試對于保證軟件開發質量有著非常重要的作用,單元測試更是必不可少,
JUnit是一個非常強
大的單元測試包,可以對一個/多個類的單個/多個方法測試,還可以將不同的TestCase組合成TestSuit,使測試
任務自動化。Eclipse同樣集成了JUnit,可以非常方便地編寫TestCase。
我們創
建一個Java工程,添加一個example.Hello類,首先我們給Hello類添加一個abs()方法,作用是返
回絕對值:

(圖一)
下一
步,我們準備對這個方法進行測試,確保功能正常。選中Hello.java,右
鍵點擊,選擇New->JUnit
Test Case:

(圖二)
Eclipse會詢問是否添加junit.jar包,確定后新建一個HelloTest類,用來測試Hello類。

(圖三)
選中setUp()和tearDown(),然后點擊“Next”:

(圖
四)
選擇要
測試的方法,我們選中abs(int)方法,完成后在HelloTest.java中輸入:

(圖五)
JUnit會以以下順序執行測試:(大致的代碼)
try {
HelloTest test = new HelloTest(); // 建立測試類實例
test.setUp(); // 初始化測試環境
test.testAbs();
// 測試某個方法
test.tearDown(); // 清理資源
}
catch…
setUp()是建立測試環境,這里創建一個Hello類的實例;tearDown()用于清理資源,如釋放打開的文件等等。以test開頭的方法被認為是測試方法,JUnit會依次執行testXxx()方法。在testAbs()方法中,我們對abs()的測試分別選擇
正數,負數和0,如果方法返回值與期待結果相同,則assertEquals不會產生異常。
如果有
多個testXxx方法,JUnit會創建多個XxxTest實例,每次
運行一個testXxx方法,setUp()和tearDown()會在testXxx前后被調用,因此,不要在一個testA()中依賴testB()。
直接運
行Run->Run
As->JUnit Test,就可
以看到JUnit測試結果:

(圖六)
綠色表
示測試通過,只要有1個測試未通過,就會顯示紅色并列出未通過測試的方法。可以試圖改變abs()的代碼,故意返回錯誤的結果(比如return n+1;),然后再運行JUnit就會報告錯誤。
如果沒
有JUnit面板,選擇Window->Show View->Other,打開JUnit的View:

(圖七)
JUnit通過單元測試,能在開發階段就找出許多Bug,并且,多個Test Case可以組合成Test Suite,讓
整個測試自動完成,尤其適合于XP方法。每增加一個小的新功能或者對代碼進行了小的修改,就立刻運行一
遍Test Suite,確保新增和修改的代碼不會破壞原有的功能,大大增強軟件的可維護
性,避免代碼逐漸“腐爛”。
初次學會使用Junit的使用是通過這篇文章的(上文),自己嘗試跟著做了一遍,結果發現它上面提供的代碼例子是錯誤
的,不過流程、圖片都很清楚。所以你可以先看看它上面是怎么說的,至于測試的代碼我稍做了改動,為的是只要說明問題就行——其實不難。
被測試的類代碼:
public class HelloJunit {
public static int abs(int n){
return n>=0?n:(-n);
}
}
Junit的測試代碼:
import junit.framework.TestCase;
public class HelloJunitTest extends TestCase {
public void testAbs() {
assertEquals(HelloJunit.abs(10),10);
assertEquals(HelloJunit.abs(-10),10);
}
}
主要代碼
行為assertEquals(HelloJunit.abs(10),10);
其中參數
的意義為:
HelloJunit.abs(10)執行類HelloJunit的abs方法(參數為10,表示求10的絕對值)。
逗號后面
的10表示為預期的結果(期望值)。
該行表示
將期望值(10)與實際值(類HelloJunit的abs方法執行結果)進行比較,如果不相
等則拋出異常。
這里只是
一個簡簡單單的例子,Junit被大家稱為優秀的白盒自動化測試框架,當然只有自己用過了才會了解。網上有許多的資料介紹這個框架,筆
者也是從自身情況出發來學習它的。當然學習使用它是需要有一定基礎的,筆者擁有C和C++的基礎,對Java的學習也開始不久,所以在這里將力
所能及的知識共享出來與大家分享,希望能夠共同提高。另外筆者是專職的測試人員,所以在描述一些問題時大多都會以測試的角度來闡述。學習此框架的目的在于
能夠在工作中進行白盒測試,在以后的介紹中還會介紹白盒測試相關的理論和工具,希望大家能夠一起提高進步。