public class caculator{
private int result;
public caculator(){
result=0;
}
public void add(int n){
result+=n;
}
public void multiply(int n){
}
public void divide(int n){
result/=n;
}
public void substract(int n){
result-=1;
}
public void clear(){
result=0;
}
public int getResult(){
return result;
}
}
上面有幾點要解說的,其中有幾個method是故意做錯的,好用於測試junit,接著看junit4所寫的程式碼
import static org.junit.Assert.*;
import static java.lang.System.out;
import org.junit.Before;
import org.junit.After;
import org.junit.Ignore;
import org.junit.Test;
public class caculatorTest{
private caculator c;
@Before public void setUp(){
out.println("set up");
c=new caculator();
}
@After public void tearDown(){
out.println("tear down");
c=null;
}
@Test public void testAdd(){
out.println("test add");
c.add(5);
assertEquals(5,c.getResult());
}
@Ignore
@Test public void testMultiply(){
out.println("test multiply");
}
public static junit.framework.Test suite() {
return new junit.framework.JUnit4TestAdapter(caculatorTest.class);
}
}
@Test這個annotation表示我們要測試某個功能,裡面所要用到的物件分別在@Before跟@After這兩個annotation的方法被準備好了;@Ignore表示說這個方法尚且未被準備好來測試,可能是因為還沒實做,也可能是其他原因
裡面的static method可以回傳一個TestSuite物件,裡面只要加入要測試的class就可以了
將上面兩個檔案放在同一個目錄,並且從junit的官方網站下載junit4.jar放到相同的目錄,接著執行
java -cp %CLASSPATH%;./junit-4.5.jar;. org.junit.runner.JUnitCore caculatorTest
這裡org.junit.runner.JUnitCore這個類別包含了一個main method,他接受的參數為準備要接受測試的class,如果有多個要測試的class就都加入在後面即可
結果如下
JUnit version 4.5
.set up
test add
tear down
Time: 0.015
OK (1 test)
請注意那個紅色的點,每個點表示通過一項測試,後面可以看到在乎叫testadd之前會先呼叫setUp跟之後呼叫tearDown,其實junit4再引入annotation之後,那兩個方法的名稱已經可以隨意取,可是沿用過去junit3以前的慣例比較顯的有可讀性,這裡也有一個跟junit3不一樣的就是,class已經不用強制繼承TestCase這個class了
沒有留言:
張貼留言