首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

JBuilder 2005 單元測試實戰 (一):業務類設計與測試點分析

     編輯:Java 相關知識

JBuilder 2005 內建 JUnit 整合,提供可視化測試用例生成、測試套件組裝、圖形化運行報告。本系列以兩個典型業務類為例,演示從代碼分析到測試代碼編寫的完整流程。

業務類一:分段函數計算器 (Subsection)

需求規約

getValue(int d) 根據輸入區間返回不同計算結果:

條件區間返回值邊界點
d < -2Math.abs(d)-3 → 3, -2 → 4
-2 ≤ d < 2 且 d ≠ 0d * d-2 → 4, -1 → 1, 1 → 1
d = 0100 (特殊標記值)0 → 100
d ≥ 2d * d * d2 → 8, 3 → 27, 32 → 32768

源碼實現 (含故意缺陷)

public class Subsection {
    public static int getValue(int d) {
        if (d == 0) {
            return 100;
        } else if (d < -2) {
            return Math.abs(d);
        } else if (d >= -2 && d < 2) {
            return d * d;
        } else { // d >= 2
            // 潛在 Bug:d > 32 時 d*d*d 溢出 int 範圍 (32767)
            // 註釋掉的保護邏輯:
            // if (d > 32) { return Integer.MAX_VALUE; }
            return d * d * d;
        }
    }

    public static int sign(double d) {
        if (d < 0) return -1;
        else if (d > 0) return 1;
        else return 0;
    }
}

測試點分析 (白盒 + 黑盒)

分類測試數據預期結果覆蓋目標
等價類-負區間-5, -35, 3d < -2 分支
邊界值-24d >= -2 邊界
等價類-零附近-1, 11, 1-2 ≤ d < 2 分支
特殊值0100d == 0 分支
邊界值28d >= 2 邊界
正常區間3, 527, 125d ≥ 2 分支
溢出風險33溢出為負數 / 異常缺陷暴露: d*d*d > Integer.MAX_VALUE
sign 函數-1.5, 0, 2.5-1, 0, 1三分支覆蓋

業務類二:字符串分割工具 (StringUtils)

需求規約

string2Array(String str, char splitChar, boolean trim):

  • 按 splitChar 分割字符串
  • trim=true 時移除首尾分隔符產生的空元素
  • null 輸入返回 null

源碼實現

public class StringUtils {
    public static String[] string2Array(String str, char splitChar, boolean trim) {
        if (str == null) return null;
        String tempStr = str;
        if (trim) tempStr = trim(tempStr, splitChar);  // 移除首尾分隔符
        int arraySize = getCharCount(tempStr, splitChar) + 1;
        String[] resultArr = new String[arraySize];
        int fromIndex = 0, endIndex = 0;
        for (int i = 0; i < resultArr.length; i++) {
            endIndex = tempStr.indexOf(splitChar, fromIndex);
            if (endIndex == -1) {
                resultArr[i] = tempStr.substring(fromIndex);
                break;
            }
            resultArr[i] = tempStr.substring(fromIndex, endIndex);
            fromIndex = endIndex + 1;
        }
        return resultArr;
    }

    private static String trim(String str, char splitChar) {
        int begin = 0, end = str.length();
        for (int i = 0; i < str.length(); i++) {
            if (str.charAt(i) != splitChar) { begin = i; break; }
        }
        for (int i = str.length(); i > 0; i--) {
            if (str.charAt(i-1) != splitChar) { end = i; break; }
        }
        return str.substring(begin, end);
    }

    private static int getCharCount(String str, char splitChar) {
        int count = 0;
        for (int i = 0; i < str.length(); i++)
            if (str.charAt(i) == splitChar) count++;
        return count;
    }
}

測試點分析

場景輸入splitChartrim預期輸出驗證點
null 輸入null,falsenull空值保護
空字符串"",false{""}單空元素
無分隔符"a",false{"a"}單元素
標準分割"a,b,c",false{"a","b","c"}多元素
首尾分隔符",a,b,",false{"","a","b",""}保留空元素
trim 模式",a,b,",true{"a","b"}移除首尾空元素
trim 對比",a,b,",false/true不同參數行為差異

下一步預告

下篇將演示:

  1. 使用 JBuilder Test Case 向導生成測試骨架
  2. 編寫具體測試方法 (assertEquals, assertTrue, 自定義數組比較)
  3. 運行單個測試用例並分析綠/紅燈報告
  4. 將多個測試用例組裝為 TestSuite 批量運行

掌握「業務規約 → 測試點矩陣 → 測試代碼」轉化思維,是單元測試從形式走向實效的關鍵。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved