Introduction
對於 programmers 來說,如何確保自己的程式碼是正確的,通常都必須要自己親自去執行程式碼,然後自己扮演使用者的角色來手動測試,這已經是早期的 programmers 會做的是了。JUnit 就是一套 framework,他幫助 programmers 解決測試中繁雜的工作,透過撰寫 unit test code 來達到測試的效果,並且採用自動化、可重複測試的功能來降低 programmers 的工作。
圖一 JUnit 官方網頁
在 Eclipse 中,JUnit 是核新的 plug-in,除非您將他反安裝了,否則您可以在 Eclipse 中找到。
Example
要撰寫一個 unit test code 其實是一件很簡單的事,因為 JUnit library 都已經將繁雜的工作改以簡短的程式碼來解決。
(1) 首先,我們要先建立一個 JUnit 的 class,點選 eclipse 中的 [File] -> [New] -> [Others],接著您就會看到如圖二的畫面出現。
圖二 建立新的元件視窗
(2) 點選該視窗的 [JUnit Test Case],並且會出現如圖三的畫面。其中我們選擇上方的 [New JUnit 3 test],並且我們將我們的 unit test case class name 填入 name 欄位,接著選擇下方的 [Class under test] 右方的 [Browse…] 按鈕,接著會出現視窗讓我們選擇我們想要測試的 class。
圖三 建立新的 JUnit Test Case
(3) 選擇好上述的資訊並填寫完畢後,按下 [Next>] 後會出現如圖四的視窗。我們可以由此視窗中選擇我們對於該 class 中我們想要測試的 methods,並將他打勾,eclipse 會自動幫我們產生測試的基本程式框架,以方便我們測試。按下 [Finish] 後就會開啟測是的程式碼,我們會看到剛才我們所勾選的 methods 會以 testXXX() 的方式出現。
NOTE:本文件示範的 JUnit 版本為 JUnit 3,若您有興趣可以自行研究 JUnit 4,不過要先對於 JDK 5.0 的 Annotation 有基本的概念才行。
圖四 選擇目標 class 我們想要測試的 methods
(4) 有了程式的框架,我們當然還是要自己撰寫測試的 scenarios。首先我們從新假設我們要測試的目標 class 內容如下:
public class Math {
public int add(int x, int y) { return x + y; }
public int subtract(int x, int y) { return x - y; }
}
(5) 接著我們就用上述的 eclipse 工具幫我們產生測試程式碼的框架:
public class MathTest extends TestCase {
public void setUp() { super.setUp(); }
public void testAdd() {}
public void testSubtract() {}
}
上述程式碼中的 setup() method 是用於起始設定的 method,也就是 JUnit 在呼叫每個測試 methods 前都會先執行 setup() method,如上面的測試程式碼中,JUnit 會依照下面的順序執行測試:setUp(), testAdd(), setUp(), testSubtract()。如果您的測試中是需要先建利一些物件,如:資料庫的連線 class等,您就不必在每個測試 methods 中撰寫建立這些物件的程式碼,您可以統一撰寫在 setup() method 中。
您所有的測試 methods 都必須以 test作為開頭,因為 JUnit 測試會根據 method 前面為 test 開頭的來進行測試。
(6) 接著我們就要開始撰寫測試的 scenario,在此我們就只示範 testAdd() method。
public class MathTest extends TestCase {
public void setUp() { super.setUp(); }
public void testAdd() {
int x = 10;
int y = 50;
int expected = 60;
int result = this.math.add(x, y);
super.assertEquals(result, expected);
}
}
上述程式碼中,我們先宣告一個class內部變數 math他是我們測試的目標,並且我們在 setup() method 中將他初始化。接著假設我們要輸入的 x and y 的值,以及我們所期望的輸出結果 expected 變數,然後我們就呼叫 Math 的 add() method 來獲得結果並存在 result 變數中,最後我們就呼叫 super class 中的 assertEquals 來斷定結果一定是要相同。
(7) 再來就是執行我們的測試案例,選擇 [Run] -> [Run As] -> [JUnit Test]。測試結果會如圖五。
圖五 測試結果報告視窗
如果您的測試無誤的話,就會在右邊出現綠色的 bar,左邊上方有一些測試的結果資訊,紀錄著您總共測試的 methods、測試中出現的 Errors 與測試中測試與您結果不符合的 Failures。
References
[1] JUnit 官方網站 http://junit.sourceforge.net/junit3.8.1/index.html
[2] Eclipse 官方網站 http://www.eclipse.org
沒有留言:
張貼留言