注:所有內容都是在eclipse上實現,關於eclipse的安裝和jdk的安裝配置,請看:http://www.cnblogs.com/fench/p/5914827.html
單元測試是什么?
百度百科的解釋是這樣的:單元測試(模塊測試)是開發者編寫的一小段代碼,用於檢驗被測代碼的一個很小的、很明確的功能是否正確。通常而言,一個單元測試是用於判斷某個特定條件(或者場景)下某個特定函數的行為。例如,你可能把一個很大的值放入一個有序list 中去,然后確認該值出現在list 的尾部。或者,你可能會從字符串中刪除匹配某種模式的字符,然后確認字符串確實不再包含這些字符了。
簡單的說,單元測試就是對你程序中最小的功能模塊進行測試,在c語言里可能是一個函數,java中可能是一個方法或者類。
目的就是為了提高代碼的質量。
junit是什么?
JUnit是一個Java語言的單元測試框架。它由Kent Beck和Erich Gamma建立,逐漸成為源於Kent Beck的sUnit的xUnit家族中最為成功的一個。 JUnit有它自己的JUnit擴展生態圈。多數Java的開發環境都已經集成了JUnit作為單元測試的工具。
也就是說junit就是別人寫好的單元測試框架,使用此框架你可以大大縮短你的測試時間和准確度(筆者現在還記得大一剛來的的時候,c語言寫的小程序,每次都是重啟測試,那種編譯-輸入--停止-編譯的苦日子,很痛苦,今天用junit這個單元測試框架好多了)。
注:eclipse已經自帶JUnit, JUnit的當前常用版本分為3.X(需要手動添加),4.X(支持注解)
我的這個版本的eclipse自帶JUnit3.X的,本文以JUnit3.x為例進行測試。
下面以 “求最大子數組之和”的例子,簡單的介紹一下單元測試是什么,junit如何入門。
1 package edu.sau.maximun; 2 public class SubArray { 3 //求兩個數中的最大 4 public int max(int x, int y){ 5 if(x>y) 6 return x; 7 else 8 return y; 9 } 10 11 //最大子數組之和 12 public int maxSubArr(int[] arr){ 13 int sum = arr[0]; //最大值子數組和 14 int sub_sum = arr[0];//中間值 15 16 for(int i = 1; i<arr.length; i++){ 17 sub_sum = max(arr[i],sub_sum+arr[i] ); 18 sum = max(sub_sum,sum); 19 } 20 return sum; 21 } 22 }
以上代碼實現了“最大子數組之和”的算法,共有max和maxSubArr兩個方法,下面開始測試(重新創建一個新包,取名 test,所有測試都是再這個新包完成)
/**.sau.maximun.SubArray; import junit.framework.TestCase; /** * @author m * @單元測試 * @time 2016/10/7 */ public class TestMaximun extends TestCase { //對方法max進行測試 public void testMax(){ int x = 1; //測試數據 int y = 2; int z = -1; SubArray sub = new SubArray(); int result1 = sub.max(x, y); int result2 = sub.max(y,x); int result3 = sub.max(z, x); assertTrue(result1 == y); assertTrue(result2 == y); assertTrue(result3 == 1); } //對方法maxSubArr測試 public void testMaxSubArr(){ int arr1[] ={1,2,3,-1}; //測試用例 int arr2[] = {1,2,-4,8,4,-4,6,-2,1}; int arr3[] ={-4,-2,-1,-3}; int arr4[] = {-4,2,-4,2,-1}; SubArray sub = new SubArray(); assertTrue(sub.maxSubArr(arr1) == 6); assertTrue(sub.maxSubArr(arr2) == 14); assertTrue(sub.maxSubArr(arr3) == -1); assertTrue(sub.maxSubArr(arr4) == 2); } }
整個文件的結構目錄如下:
程序單元測試的方法:-右擊 測試類->Run as ->JUnit test
運行結果:(Errors:0,Failure:0 說明測試通過,如果出錯,Failure是單元測試所期望的錯誤,說明你的代碼結果不滿足你的要求,Errors需要你查看系統的配置,檢查代碼。是不是手動輸入快好多?)
說明:
總結:測試類需要繼承junit.framework.TestCase類,測試方法命名需要按照public void TestXXXX格式,通過斷言來判斷結果的正確行。
測試范圍一定要滿足你的所有需求
以測試testMaxSubArr為例,具體的測試樣例及目的如下:
用例編號 |
用例描述 |
輸入數據 | 預期輸出數據 | 通過/不通過 | 評價 |
1 | 檢測能否實現最大數組求和的基本功能(一般情況) | 1,2,3,-1 | 6 | 通過 | 程序實現基本功能 |
2 | 最大子數組處於數組中間(一般情況) | 1,2,-4,8,4,-4,6,-2,1 | 14 | 通過 | 程序實現基本功能 |
3 | 數組元素均為負數,且第一個元素為最小(特殊情況) | -4,-2,-1,-3 | -1 | 通過 | 程序實現特殊情況的求和 |
4 | 數組中存在最大值相同的多個(>=2)子數組(特殊情況) | -4,2,-4,2,-1 | 2 | 通過 | 程序能對多個相同子數組進行保留 |
現在大家已經會基本的單元測試,當然這只是非常簡單的使用junit,后期我會寫一些關於junit的更具體的介紹。
代碼下載地址: https://coding.net/u/fench/p/java-junit/git
作者:fench
2016-10-09 20:40:06