JUnit測試框架的使用經驗分享

 

 一、學習Junit框架的使用
可經過如下兩個示例進行學習。
A、Junit使用方法示例1
1)把Junit引入當前項目庫中
新建一個 Java 工程—coolJUnit,打開項目coolJUnit 的屬性頁 -> 選擇「Java Build Path」子選項 -> 點選「Add Library…」按鈕 -> 在彈出的「Add Library」對話框中選擇 JUnit,並在下一頁中選擇版本 Junit 4 後點擊「Finish」按鈕。這樣便把 JUnit 引入到當前項目庫中了。
2)新建單元測試代碼目錄
單元測試代碼是不會出如今最終軟件產品中的,因此最好爲單元測試代碼與被測試代碼建立單獨的目錄,並保證測試代碼和被測試代碼使用相同的包名。這樣既保證了代碼的分離,同時還保證了查找的方便。遵守這條原則,在項目 coolJUnit 根目錄下添加一個新目錄 testsrc,並把它加入到項目源代碼目錄中。
3)在工程中添加類
添加類SampleCaculator,類中有兩個方法,分別計算加減法。編譯代碼。
public class SampleCalculator {
//計算兩整數之和
public int add(int augend, int addend){
return augend + addend;
}
//計算兩整數之差
public int subtration(int minuend, int subtrahend){
return minuend - subtrahend;
}
}
4)寫單元測試代碼
爲類SampleCalculator添加測試用例。在資源管理器SampleCalculator.java文件處右擊選new>選Junit Test Case(見圖4),Source foler選擇testsrc目錄,點擊next,選擇要測試的方法,這裏把add和subtration方法都選上,最後點finish完成。
Junit自動生成測試類SampleCalculatorTest,修改其中的代碼(以下)。
其中assertEquals斷言,用來測試預期目標和實際結果是否相等。
assertEquals( [Sting message], expected, actual )
expected是指望值(一般都是硬編碼的),actual是被測試代碼實際產生的值,message是一個可選的消息,若是提供的話,將會在發生錯誤時報告這個消息。
如想用斷言來比較浮點數(在Java中是類型爲float或者double的數),則需指定一個額外的偏差參數。
assertEquals([Sting message], expected, actual, tolerance)
其它斷言參見課本和參考書介紹。測試方法須要按照必定的規範書寫:
1. 測試方法必須使用註解 org.junit.Test 修飾。
2. 測試方法必須使用 public void 修飾,並且不能帶有任何參數。
5)查看運行結果
測試類上點擊右鍵,在彈出菜單中選擇 Run As JUnit Test。運行結果以下圖,綠色的進度條提示咱們,測試運行經過了。html

  B、Junit使用方法示例2
   1)在工程中添加類
   類WordDealUtil中的方法wordFormat4DB( )實現的功能見文件註釋。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class WordDealUtil {
/**
* 將Java對象名稱(每一個單詞的頭字母大寫)按照
* 數據庫命名的習慣進行格式化
* 格式化後的數據爲小寫字母,而且使用下劃線分割命名單詞
* 例如:employeeInfo 通過格式化以後變爲 employee_info
* @param name Java對象名稱
*/
public static String wordFormat4DB(String name){
Pattern p = Pattern.compile("[A-Z]");
Matcher m = p.matcher(name);
StringBuffer strBuffer = new StringBuffer();
while(m.find()){
//將當前匹配子串替換爲指定字符串,
//而且將替換後的子串以及其以前到上次匹配子串以後的字符串段添加到一個StringBuffer對象裏
m.appendReplacement(strBuffer, "_"+m.group());
}
//將最後一次匹配工做後剩餘的字符串添加到一個StringBuffer對象裏
return m.appendTail(strBuffer).toString().toLowerCase();
}
}
   2)寫單元測試代碼
import static org.junit.Assert.*;
import org.junit.Test;
public class WordDealUtilTest {
@Test
public void testWordFormat4DB() {
String target = "employeeInfo";
String result = WordDealUtil.wordFormat4DB(target);
assertEquals("employee_info", result);
}
}
   3)進一步完善測試用例
   單元測試的範圍要全面,如對邊界值、正常值、錯誤值的測試。運用所學的測試用例的設計方法,如:等價類劃分法、邊界值分析法,對測試用例進行進一步完善。繼續補充一些對特殊狀況的測試
//測試 null 時的處理狀況
@Test public void wordFormat4DBNull(){
String target = null;
String result = WordDealUtil.wordFormat4DB(target);
assertNull(result);
}
//測試空字符串的處理狀況
@Test public void wordFormat4DBEmpty(){
String target = "";
String result = WordDealUtil.wordFormat4DB(target);
assertEquals("", result);
}
//測試當首字母大寫時的狀況
@Test public void wordFormat4DBegin(){
String target = "EmployeeInfo";
String result = WordDealUtil.wordFormat4DB(target);
assertEquals("employee_info", result);
}
//測試當尾字母爲大寫時的狀況
@Test public void wordFormat4DBEnd(){
String target = "employeeInfoA";
String result = WordDealUtil.wordFormat4DB(target);
assertEquals("employee_info_a", result);
}
//測試多個相連字母大寫時的狀況
@Test public void wordFormat4DBTogether(){
String target = "employeeAInfo";
String result = WordDealUtil.wordFormat4DB(target);
assertEquals("employee_a_info", result);
}
   4)查看分析運行結果,修改錯誤代碼
   再次運行測試。JUnit 運行界面提示咱們有兩個測試狀況未經過測試(見圖6),當首字母大寫時獲得的處理結果與預期的有誤差,形成測試失敗(failure);而當測試對 null 的處理結果時,則直接拋出了異常——測試錯誤(error)。顯然,被測試代碼中並無對首字母大寫和 null 這兩種特殊狀況進行處理,修改以下:
//修改後的方法wordFormat4DB
public static String wordFormat4DB(String name){
if(name == null){
return null;
}
Pattern p = Pattern.compile("[A-Z]");
Matcher m = p.matcher(name);
StringBuffer sb = new StringBuffer();
while(m.find()){
if(m.start() != 0)
m.appendReplacement(sb, ("_"+m.group()).toLowerCase());
}
return m.appendTail(sb).toString().toLowerCase();
}
  二、使用Junit框架對類Date和類DateUtil進行單元測試
   只對包含業務邏輯的方法進行測試,包括:
   類Date中的
   isDayValid(int year, int month, int day)
   isMonthValid(int month)
   isYearValid(int year)
   類DateUtil中的
   isLeapYear(int year)
   getDayofYear(Date date) 
java

本文選自:http://www.spasvo.com/news/html/2014123144207.htmlweb

相關文章
相關標籤/搜索