JUnit是由Erich Gamma和Kent Beck編寫的一個回歸測試框架(regression testing framework)。Junit測試是程序員測試,即白盒測試。
JUnit測試骨架
使用JUnit時,主要都是通過繼承TestCase類別來撰寫測試用例,使用testXXX()名稱來撰寫單元測試。
用JUnit寫測試真正所需要的三件事:
1.一個import語句引入所有junit.framework.*下的類。
2.一個extends語句讓你的類從TestCase繼承。
3.一個調用super(string)的構造函數。
功能類MathTool
package com.zj.c01;
public class MathTool{
public static int gcd(int num1,int num2){
int r=0;
while(num2!=0){
r=num1%num2;
num1=num2;
num2=r;
}
return num1;
}
}
測試類MathToolTest
package com.zj.c01;
import junit.framework.TestCase;
public class MathToolTest extends TestCase{
public MathToolTest(String name){
super(name);
}
public void testGcd(){
assertEquals(5,MathTool.gcd(10,5));
}
}
使用Eclipse-Run As JUnit Test
在運行TestRunner執行測試時,你會發現到有Failure與Error兩種測試尚未通過的信息。
Failure指的是預期的結果與實際運行單元的結果不同所導致,例如當使用assertEquals()或其它assertXXX()方法斷言失敗時,會回報Failure,這時候要檢查你的單元方法中的邏輯設計是否有誤。
Error指的是你的程序沒有考慮到的情況,在斷言之前程序因為某種錯誤引發例外而終止,例如在單元中存取某個數組,因為存取超出索引而引發ArrayIndexOutOfBoundsException,這會使得單元方法無法正確完成,在測試運行到asertXXXX()前提前結束,這時候要檢查你的單元方法中是否有未考慮到的情況而引發流程突然中斷。
JUnit的各種斷言
JUnit提供了一些輔助函數,用于幫助你確定某個被測試函數是否工作正常。通常而言,我們把所有這些函數統稱為斷言。斷言是單元測試基本的組成部分。
1.assertEquals([String message],expected,actual)
比較兩個基本類型或對象是否相等(expected和actual是原始類型數值(primitive value)或者必須為實現比較而具有equal方法);
2.assertFalse([String message],boolean condition)
對布爾值求值,看它是否為“真“;
3.assertTrue([String message],boolean condition)
對布爾值求值,看它是否為“假“;
4.assertNull([String message],java.lang.Object object)
檢查對象是否為“空“;
5.assertNotNull([String message],java.lang.Object object)
檢查對象是否不為“空”;
6.assertSame([String message],expected,actual)
檢查兩個對象是否為同一實例;
7.assertNotSame([String message],expected,actual)
檢查兩個對象是否不為同一實例;
8.fail(String message)
使測試立即失敗,其中message參數使可選的。這種斷言通常被用于標記某個不應該到達的分支(例如,在一個預期發生的異常之后)。