背景與工具選型
- 測試驅動開發 (TDD):先寫測試,後寫代碼,重構,循環。極限編程 (XP) 核心實踐。
- CppUnit:XUnit 家族 C++ 版,SourceForge 託管,功能完整、文檔豐富、社區活躍。
CppUnit 源碼結構
cppunit/
├── doc/ # 文檔 (含 INSTALL, INSTALL-WIN32.txt)
├── examples/ # 自測試例,也是最佳學習樣本
│ ├── examples.dsw # VC6 工作區
│ ├── CppUnitTestApp/ # GUI 運行器測試
│ ├── CppUnitTestMain/ # 控制台運行器測試
│ └── HostApp/ # 失敗案例演示
├── include/ # 頭文件 (需加入 VC Include 路徑)
├── lib/ # 編譯輸出 .lib/.dll (需加入 Library 路徑)
└── src/ # 源碼
├── CppUnitLibraries.dsw # 靜態/動態庫 + TestRunner.dll 編譯
└── TestRunner/ # GUI 運行器 DLL 源碼
環境配置步驟 (VC6 / Windows 2000)
- 編譯庫:打開
src/CppUnitLibraries.dsw,分別構建 CppUnitLib (Static)、CppUnitDll (Dynamic)、TestRunner (Debug/Release)。輸出至 lib/。
- 複製文件:將
lib/ (含 .lib/.dll) 和 include/ 複製到自定義目錄 (如 F:\cppunit\lib, F:\cppunit\include)。
- VC 設置:
Tools → Options → Directories 添加 Include 和 Library 路徑。
- 專案設置:
- 鏈接正確的庫 (
cppunit.lib 或 cppunit_dll.lib)。
- 開啟 RTTI:
Project Settings → C++ → C++ Language → Enable RTTI。
- TestRunner.dll 路徑:將其目錄加入系統環境變量
PATH,或放在測試程序同級目錄。
三種運行器體驗
| 運行器專案 | 界面類型 | 特點 |
| CppUnitTestApp | GUI (TestRunner) | 樹狀結構展示 Suite/Case/Method,綠/紅進度條,點擊 Run 執行 |
| CppUnitTestMain | 控制台文本 | 輕量、適合 CI/CD 集成、輸出可解析文本 |
| HostApp | GUI | 演示各種失敗情況 (斷言失敗、異常、超時...) |
編寫第一個測試用例
#include
#include
class MyTest : public CppUnit::TestFixture {
CPPUNIT_TEST_SUITE(MyTest);
CPPUNIT_TEST(testAddition);
CPPUNIT_TEST(testSubtraction);
CPPUNIT_TEST_SUITE_END();
public:
void setUp() { /* 初始化 */ }
void tearDown() { /* 清理 */ }
void testAddition() {
CPPUNIT_ASSERT(1 + 1 == 2);
CPPUNIT_ASSERT_EQUAL(3, 1 + 2);
}
void testSubtraction() {
CPPUNIT_ASSERT(5 - 3 == 2);
}
};
CPPUNIT_TEST_SUITE_REGISTRATION(MyTest); // 自動註冊到註冊表
TDD 實戰流程演示
- 紅:寫失敗測試
CPPUNIT_ASSERT(Calculator().Add(1,2) == 3); (Calculator 尚未實現)。
2. 綠:最小實現 int Add(int a, int b) { return a+b; } 使測試通過。
3. 重構:提取公共代碼、改善命名、添加邊界測試。
4. 循環。
進階功能
- TestSuite 嵌套:大型項目按模塊組織測試樹。
- 異常測試:
CPPUNIT_ASSERT_THROW(expr, ExceptionType)。
- 參數化測試:數據驅動測試 (需擴展或用新版 CppUnit)。
- 自定義斷言:封裝業務斷言邏輯。
常見坑點
- 忘記開啟 RTTI → 運行時崩潰/斷言失效。
- TestRunner.dll 未在 PATH 中 → GUI 運行器無法加載。
- 靜態/動態庫混用 (MT/MD 不匹配) → 鏈接錯誤或運行時崩潰。
- 測試代碼未註冊 (缺
CPPUNIT_TEST_SUITE_REGISTRATION) → 執行無用例。
總結
CppUnit 將 TDD 引入 C++ 開發,通過自動化測試、持續集成、重構保護顯著提升代碼質量。掌握其環境配置、測試編寫、運行器選擇與 TDD 節奏,是 C++ 工程師邁向專業軟件工程的關鍵一步。
官網:https://sourceforge.net/projects/cppunit/
參考:GeeksforGeeks - Word Break Problem
- 上一篇文章: C# 語言特性解析:效率、安全性與網絡編程優勢(原文標題誤標為 C++)
- 下一篇文章: Boost 庫精華指南:準標準庫的核心組件與工程落地建議
Copyright ©
程式碼之家 All Rights Reserved