首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 2005 + DUnit 搭建敏捷開發平台:重構、單元測試、IDE 精簡全紀錄

     編輯:Delphi

從 Java/Eclipse/JUnit 生態轉向 Delphi 2005,如何建立「重構 + 單元測試 + 持續整合」的敏捷環境?本文記錄 Delphi 2005 安裝、SP1 打補丁、DUnit 整合、IDE 套件精簡 (保留重構功能)、專案分層架構 (GUI/Core/TestCore)、測試專案輸出 DLL 供 DUnit 執行、工具菜單整合 DUnit 的完整實踐步驟。

環境準備

IDE 精簡:保留重構的最小套件清單

修改啟動參數 BDS.exe -rMyProfile,編輯註冊表 HKCU\Software\Borland\MyProfile\3.0\Known IDE Packages,僅保留下列套件 (其餘刪除或改名禁用):


"$(BDS)\Bin\vclmenudesigner90.bpl"
"$(BDS)\Bin\win32debugproide90.bpl"
"$(BDS)\Bin\htmide90.bpl"
"$(BDS)\Bin\iteidew3290.bpl"
"$(BDS)\Bin\SrcManIDE90.bpl"
"$(BDS)\Bin\todoide90.bpl"
"$(BDS)\Bin\htmlhelp290.bpl"
"$(BDS)\Bin\idefilefilters90.bpl"
"$(BDS)\Bin\startpageide90.bpl"
"$(BDS)\Bin\refactoride90.bpl"        // 核心重構套件,必須保留
"$(BDS)\Bin\dbkdebugide90.bpl"
"$(BDS)\Bin\exceptiondiag90.bpl"
"$(BDS)\Bin\deployide90.bpl"
"$(BDS)\Bin\plugview90.bpl"
"$(BDS)\Bin\coreproide90.bpl"
"$(BDS)\Bin\IDETools90.bpl"
"$(BDS)\Bin\unittestide90.bpl"       // DUnit IDE 整合
"$(BDS)\Bin\historyide90.bpl"
"$(BDS)\Bin\htmltidy90.bpl"
"$(BDS)\Bin\HTMLFmt90.bpl"
"$(BDS)\Bin\mlcc90.bpl"
"$(BDS)\Bin\delphivclide90.bpl"
"$(BDS)\Bin\delphicoreproide90.bpl"
"$(BDS)\Bin\win32debugide90.bpl"
"$(BDS)\Bin\htmlide90.bpl"
"$(BDS)\Bin\delphide90.bpl"
"$(BDS)\Bin\mtspro90.bpl"
"$(BDS)\Bin\mtsent90.bpl"
"$(BDS)\Bin\iteidenet90.bpl"
"$(BDS)\Bin\NetImportWiz90.bpl"
"$(BDS)\Bin\DataExplorer90.bpl"

精簡後啟動速度明顯提升,重構 (Rename/Extract Method/Change Params) 正常運作。

專案分層架構


ProjectGroup.groupproj
  ├─ GUI_App.bdsproj      // VCL EXE:介面層 (Form、DataModule、報表)
  └─ Core_Tests.bdsproj   // Win32 DLL:核心邏輯 + 單元測試
        ├─ Core.pas       // 純邏輯類別 (無 VCL 依賴)
        ├─ TestCore.pas   // DUnit TestCase
        └─ exports: RegisteredTests name 'Test'; // DUnit 掃描入口
  • GUI 專案引用 Core 單元 (Search Path 指向 Core 目錄)。
  • Core_Tests 專案輸出 Core_Tests.dll,DUnit 載入此 DLL 發現並執行測試。
  • 實現「介面與邏輯分離、邏輯可獨立測試、GUI 輕量化」。

編寫第一個 DUnit 測試


unit TestBasic;
interface
uses TestFramework;
type
  TBasic = class
  public
    function Add(A, B: Integer): Integer;
  end;

  TTestBasic = class(TTestCase)
  private
    FBasic: TBasic;
  public
    procedure SetUp; override;
    procedure TearDown; override;
  published
    procedure TestAdd;
  end;

implementation
function TBasic.Add(A, B: Integer): Integer;
begin Result := A + B; end;

procedure TTestBasic.SetUp;
begin FBasic := TBasic.Create; end;

procedure TTestBasic.TearDown;
begin FBasic.Free; end;

procedure TTestBasic.TestAdd;
begin CheckEquals(2, FBasic.Add(1, 1)); end;

initialization
  RegisterTest('', TTestBasic.Suite);
end.

DUnit 整合到工具菜單

  • Tools → Configure Tools → Add:
    Title: &DUnit
    Program: DUnit.exe (完整路徑)
    Working Dir: $PROJECTDIR
    Parameters: $PROJECTDIR\Core_Tests.dll (或通過 File→Load Test 手動選擇)
  • 點擊工具欄 DUnit 圖示 → 彈出測試視窗 → Run All → 綠燈通過。

敏捷工作流

  1. 為既有 Core 邏輯補寫測試 (目標覆蓋率 > 80%)。
  2. 重構:Rename/Extract Method/Introduce Interface… 綠燈保護下放心重構。
  3. 新功能:先寫失敗測試 (Red) → 實現通過 (Green) → 重構。
  4. 建置腳本調用 DUnit 命令列模式 (DUnit.exe /run Core_Tests.dll) 接入 CI。

避坑指南

元件版本/來源備註
Delphi 2005Architect/Enterprise (含 Win32 + .NET)必須同時安裝 Win32 與 .NET 人格,否則重構功能失效
SP1 更新包Borland 官方 / delphifans.com安裝緩慢需光盤映像,建議裝
DUnitSourceForge dunit project編譯為 DCU/DLL,加入 Library Path
坑點解決
只裝 Win32 人格 → 重構失效必須同時安裝 .NET 人格
刪太多 IDE 套件 → 重構/單元測試菜單消失保留 refactoride90.bpl、unittestide90.bpl
DUnit 找不到測試DLL 必須 exports RegisteredTests name 'Test'; Uses TestFramework
測試執行緒模式下 AVDUnit 預設主執行緒跑測試,避免在測試中建立次要執行緒未同步

這套環境雖基於 Delphi 2005 (2005 年產品),但「分層架構 + 單元測試 + 重構保護」的核心思想完全適用於現代 Delphi 11/12 + DUnitX / DUnit2 + IDE Fix Pack 等工具鏈。

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