在Eclipse中使用JUnit4進行單元測試
單元測試,JUnit4。
這兩個有什么關系呢?這就好比(草)單元測試和(割草機)。用這個JUnit4工具去輔助我們進行測試。其實不理解這個也沒關系,聽多了見多了用多了,自然而然地就會懂了。
有人可能會想,那我直接自己編寫個測試的方法不就可以了。例如寫個System.out.print輸出,看看是否與我們預期的相等。Bingo!這樣也是可以的。但是你有割草機不用,那效果也是很Duang的。
開始我也覺得沒有必要使用割草機(JUnit)的,但是我了解了割草機(JUnit)之后,我很喜歡那種唰唰唰(綠條)的感覺。
如果你還是一臉疑惑不知道什么是JUnit4,不知道單元測試,OK,Don‘t worry。Just Follow me.跟我一步一步來,先讓你體驗下唰唰唰的快感。
第一步:
打開eclipse.exe,創建一個名為“Ives”的工項目,創建一個名為”UnitTest”的類。寫幾個方法:兩數+ - * /的方法和返回結果的方法。
代碼如下:

1 import java.util.*; 2 public class Expression { 3 int a; 4 int b; 5 static int c;//用戶答案 6 int answer;//答案 7 static Scanner in=new Scanner(System.in); 8 9 10 public int Expression(){ 11 a = new Random().nextInt()%10; 12 b = new Random().nextInt()%10; 13 System.out.print(""+a+"+"+b+"="); 14 return answer = a + b; 15 16 } 17 public static void main(String[] args){ 18 int answer; 19 Expression expression = new Expression(); 20 answer = expression.Expression(); 21 try{ 22 Expression.c = in.nextInt(); 23 } 24 catch(InputMismatchException e) 25 { System.err.println("\nError ,please Enter a Int number"); 26 } 27 if(answer==c) 28 { 29 System.out.print("答對了"); 30 } 31 else System.out.print("答錯了"); 32 //System.out.print("answer="+answer); 33 } 34 }
第二步:
Duang!酷炫的效果來了,跟緊腳步了。
將JUnit4單元測試包引入這個項目:在該項目“Ives”上點右鍵,點“屬性”(Properties),如圖:
在彈出的屬性窗口中,首先在左邊選擇“Java 構建路徑”(Java Build Path),然后到右上選擇"庫(L)"(Libraries)標簽,之后在最右邊點擊“添加庫(A)”(Add Libraries)按鈕,如下圖所示:
點擊完成,JUnit4軟件包就被包含進我們這個項目了。
第三步:
生成JUnit測試框架:在Eclipse的包資源管理器(Package Explorer)中用右鍵點擊該類”UnitTest“彈出菜單,選擇 新建 →JUnit測試用例 (New à JUnit Test Case)。如下圖所示:
在彈出的對話框中,進行相應的選擇,如下圖所示:
點擊完成之后會出現如下圖:
千萬不要去刪除@Test這個標志很重要的!!!!!然后把fail(“尚未實現”)刪除,把自己的代碼敲進去就可以了。我選擇了測試4個方法,所以它會自動生成4個測試方法。
Duang!!!
那測試方法怎么寫呢?舉個例子,我想知道我的UnitTest里面的plus方法有沒有寫對,那我就對這個方法寫個測試。把a,b兩個數傳遞進去,例如a=1和b=1,那a+b就等2,所以這里我們又要了解新的東西了。那就是關於JUnit 的api了,下面有關於JUnit的api,到時候我看看要不要貼幾個常用的方法出來,加上實例,這樣會更加容易理解。
繼續我們的話題:我們知道a+b=2,所以如果plus方法的result是2的話,那就說明了我們的這個plus暫時沒有這類型的bug。所以我們要用到方法assertEquals(double expected, double actual)
這個方法里的double expected是我們期望的值,double actual是實際的值。例如
assertEquals(2, a+b),這樣就可以測試方法有沒有算錯了。其實電腦一般都不會算錯吧?哈哈
完整的測試代碼如下:

1 import static org.junit.Assert.*; 2 import org.junit.Test; 3 4 public class UnitTestTest { 5 public static UnitTest puls = new UnitTest(); 6 public static int answer; 7 @Test 8 public void testPlus() { 9 puls.plus(1,1); 10 assertEquals(2, puls.getresult()); 11 } 12 13 @Test 14 public void testMinus() { 15 puls.minus(1,1); 16 assertEquals(0, puls.getresult()); 17 } 18 19 @Test 20 public void testMultiply() { 21 puls.multiply(1,1); 22 assertEquals(1, puls.getresult()); 23 24 } 25 26 @Test(expected=ArithmeticException.class) 27 public void testDivide1(){ 28 puls.divide(0, 1); 29 } 30 31 @Test 32 public void testDivide() { 33 puls.divide(1,1); 34 assertEquals(1, puls.getresult()); 35 } 36 }
可能用心看的童鞋可能會發現我還寫了一個測試時關於有沒有拋出異常的。如果除數為0那就拋出異常,再去測試它除數為0是有沒有拋出異常。有人可能會問,我不知道什么異常啊,很簡單,看
我們寫完代碼,那么唰唰唰的快感馬上就要到來了。
我把minus方法里的“減號”改成了“加號”:如下圖
然后在運行測試類UnitTestTest.如下圖:
被測試的代碼有bug,也就是之前把-修改成了+,所以就會出故障。
所以當全部都是綠色的時候是不是很爽,有沒有感受到割草機(JUnit4)的唰唰唰的快感。
哈哈,教程到這里就結束了。是不是還想要更多?那就持續關注我的博客吧,可能會在更新一遍更加細節的。
個人體會:
1.測試類一定要看清楚有沒有寫對,有時候復制黏貼沒有修改就會出現錯誤,所以要看清楚調用的方法對了沒有。
2.這個好像真的有比自己寫一個測試類來測試更爽,因為有一條綠色的東西,感覺很好玩。
3.我覺得這些小程序不需要寫單元測試,而且看到好多人在網上吐槽說現在基本做開發的都不會去寫單元測試的,不過,寫多點沒事兒,所學點更好。所以我不想去追究以后有沒有用,現在能學想學那就去學,能寫想寫,那就去寫。所以有時候真的不需要問為什么?有很多事情你現在做可能沒有收益,也可能以后也沒有收益,那為什么要去做呢?
柯騰說,你信不信十年后,我連log是什么都不知道,還可以活得好好的。 沈佳宜說,我知道。 柯景騰說,那你還那么用功讀書。 沈佳宜說,人生本來很多事就是徒勞無功的啊!不是每一件事一定要有意義,經歷同樣很寶貴!
有感而發,就引用了這句話了。哈哈
---------這篇博文就到此結束了------------
--------如果以上有什么錯誤或者不足之處,歡迎指出。--------
PS:長期招募小伙伴一起組成一個團隊學習軟件開發(java), 可以合作開發軟件,也可以討論交流,有志同道合的小伙伴可以發站內消息。
附:
Junit API:http://www.udel.edu/CIS/software/dist/junit4.1/javadoc/