環境準備
- 下載源碼:SourceForge CppUnit。
- 編譯庫:打開
src/CppUnitLibraries.dsw,分別編護 Debug/Release 版 CppUnitd.lib/CppUnit.lib 及 testrunnerd.lib/testrunner.lib,輸出至 lib 目錄。
- VS 設置:
Tools → Options → Projects → VC++ Directories 添加 Include/Library 路徑。
- 系統 Path 添加
lib 目錄,確保運行時找到 DLL。
創建測試項目 (MFC 對話框宿主)
stdafx.h 引入核心頭文件
#include
#include
#include
#ifdef _DEBUG
#pragma comment(lib, "testrunnerd.lib")
#pragma comment(lib, "CppUnitd.lib")
#else
#pragma comment(lib, "testrunner.lib")
#pragma comment(lib, "CppUnit.lib")
#endif
using namespace CppUnit;
修改應用程序入口
BOOL CUnitTestApp::InitInstance() {
MfcUi::TestRunner runner;
runner.addTest(TestFactoryRegistry::getRegistry("SampleUnitTest").makeTest());
runner.run(); // 彈出 MFC 測試運行器界面
return FALSE; // 不進入主對話框循環
}
編寫測試用例
頭文件
class CSampleTestCase : public TestCase {
public:
CSampleTestCase() {}
virtual ~CSampleTestCase() {}
CPPUNIT_TEST_SUITE(CSampleTestCase);
CPPUNIT_TEST(TestAdd);
CPPUNIT_TEST_SUITE_END();
void TestAdd();
};
源文件
#include "SampleTestCase.h"
#include "TargetCode.h" // 被測代碼頭文件
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(CSampleTestCase, "SampleUnitTest");
void CSampleTestCase::TestAdd() {
CPPUNIT_ASSERT_EQUAL(1, 1); // 斷言示例
// 實際測試邏輯...
}
關鍵宏說明
CPPUNIT_TEST_SUITE / _END:聲明測試套件。
CPPUNIT_TEST(method):註冊測試方法。
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(cls, registryName):將測試套件註冊到指定名稱的註冊表,供 TestFactoryRegistry::getRegistry 獲取。
- 常用斷言:
CPPUNIT_ASSERT, CPPUNIT_ASSERT_EQUAL, CPPUNIT_ASSERT_DOUBLES_EQUAL, CPPUNIT_FAIL 等。
進階提示
- 使用
TestFixture 機制 (setUp/tearDown) 管理測試前後置資源。
- 集成到 CI 流程:命令行運行
TestRunner.exe 並輸出 XML/JUnit 格式報告。
- 測試私有成員:
FRIEND_TEST 宏或將測試類聲明為友元。