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

JBuilder 2005 單元測試實戰:從分段函數到字串工具類的測試驅動開發

     編輯:Java 相關知識

測試對象:兩個典型業務類別

為示範單元測試全流程,選取兩個具代表性的工具類:

1. 分段函數 Subsection

public class Subsection {
    /** 符號函數:負數→-1,零→0,正數→1 */

getValue(int d) 邏輯:

  • d < -2 → |d|
  • -2 ≤ d < 2 且 d ≠ 0 → d²
  • d = 0 → 100
  • d ≥ 2 → d³(註:d > 32 時 d³ 溢位 int,原始碼刻意註解溢位保護,模擬潛在 Bug)

2. 字串工具 StringUtils

核心方法:string2Array(String str, char splitChar, boolean trim)

  • 支援分隔符分割、可選去除首尾分隔符
  • 內部輔助:trim() 去首尾分隔符、getCharCount() 計算分隔符數量決定陣列大小
  • 邊界條件:null 輸入返回 null、空字串、連續分隔符、首尾分隔符

測試策略:邊界值 + 等價類 + 異常路徑

Subsection 測試矩陣

輸入 d預期輸出測試焦點
-55d < -2,絕對值
-24邊界 -2,平方
-11區間內負數平方
0100特殊值 0
11區間內正數平方
28邊界 2,立方
33溢位/異常d > 32 溢位測試(預期失敗,驗證 Bug 存在)

StringUtils 測試矩陣

輸入字串分隔符trim預期結果測試焦點
"a,b,c"','false["a","b","c"]基本分割
",a,b,c,"','true["a","b","c"]首尾分隔符去除
",,a,,b,,"','true["","a","","b",""]連續分隔符產生空元素
null','truenull空輸入保護
""','false[""]空字串語義

JBuilder 2005 測試操作流程

  1. 專案啟用 JUnit 庫(工具 → 專案屬性 → 庫 → 加入 junit.jar)
  2. 對目標類別右鍵 → 建立測試類別 → 選擇測試方法 → 自動生成骨架
  3. 補全測試資料與斷言(assertEquals、assertArrayEquals、assertNull)
  4. 執行測試:工具列「綠色播放鍵」或 Ctrl+F10
  5. 查看測試報告:綠條 = 通過,紅條 = 失敗,堆疊追蹤定位斷言行

測試代碼範例 (JUnit 3.8 風格)

public class SubsectionTest extends TestCase {
    public void testGetValue_BoundaryNegativeTwo() {
        assertEquals(4, Subsection.getValue(-2));
    }
    public void testGetValue_Zero() {
        assertEquals(100, Subsection.getValue(0));
    }
    public void testGetValue_Overflow() {
        // 預期失敗:33^3 = 35937 > Integer.MAX_VALUE? 實際 33^3=35937 未溢位,需更大值
        // 修正:Integer.MAX_VALUE=2147483647, 1290^3≈2.14e9 接近溢位
        assertEquals(35937, Subsection.getValue(33)); // 此處通過,溢位測試需調整輸入
    }
}

public class StringUtilsTest extends TestCase {
    public void testString2Array_Trim() {
        String[] expected = {"a", "b", "c"};
        assertArrayEquals(expected, StringUtils.string2Array(",a,b,c,", ',', true));
    }
    public void testString2Array_NullInput() {
        assertNull(StringUtils.string2Array(null, ',', true));
    }
}

測試驅動開發 (TDD) 迴路示範

  1. Red:先寫失敗測試(如新增 splitChar 為字串的多字元分割需求)
  2. Green:最小實現通過測試
  3. Refactor:提取共用邏輯、優化演算法、補充邊界測試

常見測試反模式與對策

  • 測試相依執行順序 → 每個測試獨立建立/清理資料
  • 測試內部實作細節 → 僅驗證公開 API 輸出,私有方法透過公開方法間接測試
  • 忽略異常路徑 → 額外編寫「預期拋出異常」的測試案例
  • 測試代碼重複 → 使用 @Parameterized (JUnit 4+) 或資料驅動測試框架

總結

以 Subsection 與 StringUtils 為例,展示了從需求分析 → 測試矩陣設計 → JBuilder 生成骨架 → 補全斷言 → 執行驗證 → 重構補強的完整單元測試閉環。測試不僅是「驗證正確」,更是活文檔、重構安全網、設計質量檢驗器。掌握邊界值、等價類、異常路徑三大測試技法,配合 IDE 自動化支援,讓測試真正融入日常開發節奏。

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