Java代碼 復(fù)制代碼
package com.ai92.cooljunit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 對(duì)名稱、地址等字符串格式的內(nèi)容進(jìn)行格式檢查
* 或者格式化的工具類
*
* @author Ai92
*/
public class WordDealUtil {
/**
* 將Java對(duì)象名稱(每個(gè)單詞的頭字母大寫)按照
* 數(shù)據(jù)庫(kù)命名的習(xí)慣進(jìn)行格式化
* 格式化后的數(shù)據(jù)為小寫字母,并且使用下劃線分割命名單詞
*
* 例如:employeeInfo 經(jīng)過格式化之后變?yōu)?employee_info
*
* @param name Java對(duì)象名稱
*/
public static String wordFormat4DB(String name){
Pattern p = Pattern.compile("[A-Z]");
Matcher m = p.matcher(name);
StringBuffer sb = new StringBuffer();
while(m.find()){
m.appendReplacement(sb, "_"+m.group());
}
return m.appendTail(sb).toString().toLowerCase();
}
}
它是否能按照預(yù)期的效果執(zhí)行呢?嘗試為它編寫 JUnit 單元測(cè)試代碼如下:
Java代碼 復(fù)制代碼
package com.ai92.cooljunit;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
public class TestWordDealUtil {
//測(cè)試wordFormat4DB正常運(yùn)行的情況
@Test public void wordFormat4DBNormal(){
String target = "employeeInfo";
String result = WordDealUtil.wordFormat4DB(target);
assertEquals("employee_info", result);
}
}
很普通的一個(gè)類嘛!測(cè)試類 TestWordDealUtil 之所以使用“Test”開頭,完全是為了更好的區(qū)分測(cè)試類與被測(cè)試類。測(cè)試方法 wordFormat4DBNormal 調(diào)用執(zhí)行被測(cè)試方法 WordDealUtil.wordFormat4DB,以判斷運(yùn)行結(jié)果是否達(dá)到設(shè)計(jì)預(yù)期的效果。需要注意的是,測(cè)試方法 wordFormat4DBNormal 需要按照一定的規(guī)范書寫:
測(cè)試方法必須使用注解 org.junit.Test 修飾。
測(cè)試方法必須使用 public void 修飾,而且不能帶有任何參數(shù)。
測(cè)試方法中要處理的字符串為“employeeInfo”,按照設(shè)計(jì)目的,處理后的結(jié)果應(yīng)該為“employee_info”。assertEquals 是由 JUnit 提供的一系列判斷測(cè)試結(jié)果是否正確的靜態(tài)斷言方法(位于類 org.junit.Assert 中)之一,我們使用它將執(zhí)行結(jié)果 result 和預(yù)期值“employee_info”進(jìn)行比較,來判斷測(cè)試是否成功。
看看運(yùn)行結(jié)果如何。在測(cè)試類上點(diǎn)擊右鍵,在彈出菜單中選擇 Run As JUnit Test。運(yùn)行結(jié)果如下圖所示:
圖3 JUnit 運(yùn)行成功界面
綠色的進(jìn)度條提示我們,測(cè)試運(yùn)行通過了。但現(xiàn)在宣布代碼通過了單元測(cè)試還為時(shí)過早。記。耗膯卧獪y(cè)試代碼不是用來證明您是對(duì)的,而是為了證明您沒有錯(cuò)。因此單元測(cè)試的范圍要全面,比如對(duì)邊界值、正常值、錯(cuò)誤值得測(cè)試;對(duì)代碼可能出現(xiàn)的問題要全面預(yù)測(cè),而這也正是需求分析、詳細(xì)設(shè)計(jì)環(huán)節(jié)中要考慮的。顯然,我們的測(cè)試才剛剛開始,繼續(xù)補(bǔ)充一些對(duì)特殊情況的測(cè)試:
Java代碼 復(fù)制代碼
public class TestWordDealUtil {
……
//測(cè)試 null 時(shí)的處理情況
@Test public void wordFormat4DBNull(){
String target = null;
String result = WordDealUtil.wordFormat4DB(target);
assertNull(result);
}
//測(cè)試空字符串的處理情況
@Test public void wordFormat4DBEmpty(){
String target = "";
String result = WordDealUtil.wordFormat4DB(target);
assertEquals("", result);
}
//測(cè)試當(dāng)首字母大寫時(shí)的情況
@Test public void wordFormat4DBegin(){
String target = "EmployeeInfo";
String result = WordDealUtil.wordFormat4DB(target);
assertEquals("employee_info", result);
}
//測(cè)試當(dāng)尾字母為大寫時(shí)的情況
@Test public void wordFormat4DBEnd(){
String target = "employeeInfoA";
String result = WordDealUtil.wordFormat4DB(target);
assertEquals("employee_info_a", result);
}
//測(cè)試多個(gè)相連字母大寫時(shí)的情況
@Test public void wordFormat4DBTogether(){
String target = "employeeAInfo";
String result = WordDealUtil.wordFormat4DB(target);
assertEquals("employee_a_info", result);
}
}