<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    qileilove

    blog已經轉移至github,大家請訪問 http://qaseven.github.io/

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

    1、學習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。運行結果如下圖,綠色的進度條提示我們,測試運行通過了。
     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();
    }
      2、使用Junit框架對類Date和類DateUtil(參見附錄)進行單元測試。
      只對包含業務邏輯的方法進行測試,包括:
      類Date中的
      isDayValid(int year, int month, int day)
      isMonthValid(int month)
      isYearValid(int year)
      類DateUtil中的
      isLeapYear(int year)
      getDayofYear(Date date)

    posted on 2014-12-03 13:43 順其自然EVO 閱讀(411) 評論(0)  編輯  收藏 所屬分類: 測試學習專欄

    <2014年12月>
    30123456
    78910111213
    14151617181920
    21222324252627
    28293031123
    45678910

    導航

    統計

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 99麻豆久久久国产精品免费| 羞羞视频免费观看| 久久精品免费观看| 亚洲国产精彩中文乱码AV| 久久久久久国产a免费观看不卡| 亚洲国产精品无码久久久久久曰 | 久久久久国色av免费看| 亚洲国产精品乱码一区二区| 大地影院MV在线观看视频免费| 亚洲尤码不卡AV麻豆| 在线涩涩免费观看国产精品 | 亚洲人成网站在线播放vr| 精品久久久久久无码免费| 亚洲精品自产拍在线观看| 日韩免费视频一区二区| 亚洲美免无码中文字幕在线| 国产高清不卡免费在线| 亚洲一区二区影视| 国产黄色片在线免费观看| 欧亚一级毛片免费看| 亚洲色欲久久久综合网东京热| 另类免费视频一区二区在线观看| 久久精品国产亚洲av高清漫画| ww在线观视频免费观看| 亚洲精品乱码久久久久蜜桃| 亚洲国产精品尤物yw在线| 免费人成在线观看网站| 久久精品亚洲AV久久久无码| 国产hs免费高清在线观看| 国产免费区在线观看十分钟| 亚洲AV无码一区东京热久久| 无码日韩人妻av一区免费| 牛牛在线精品免费视频观看| 亚洲成AV人片一区二区密柚| 亚洲中文无码永久免费| 一边摸一边桶一边脱免费视频 | 亚洲人成无码www久久久| 无码av免费一区二区三区| 久久精品国产99国产精品亚洲| 亚洲精品高清一二区久久| 国产成人免费午夜在线观看|