CppUnit 是開放原始碼的測試載入器,來源於 Java 版本的 JUnit。單元測試在極限編程理論中有非常重要的作用。即使不採用極限編程方式,每個軟體工程師應該寫測試程式、準備測試資料、測試自己寫的軟體模組能夠運行。
CppUnit 可以用來同時測試多個軟體模組,並且顯示有多少成功、多少失敗。有命令列方式運行,VC 寫的 GUI 程式介面,也有 QT 的 GUI 程式介面。以下是 VC 運行介面。
如果您想用 CppUnit 來進行軟體測試的話,可以到 CppUnit 在 Sourceforge 上面的網站下載原代碼,裡面有樣本程式。
我們可以從 cppunit-1.10.2/examples/msvc6/CppUnitTestApp/CppUnitTestApp.dsw 改造入手,全部編譯後,將原有的 cppunit、DSPlugIn、TestRunner 幾個project 刪除,只留下CppUnitTestApp project。在 VC 的 File View 將原有的 DLL Dependencies,Tests 刪除。然後增加自己的測試程式。
測試的 C++ 代碼都必須加入到這個 Project ,如果用 C++ Builder 就只能用那個命令列的版本了。如果有失敗的測試單元,則顯示是哪些測試單元。
一般的測試單元,寫一個 CPPUNIT_NS::TestCase 的子類,裡面寫一個或者多個 testXXX 函數。在 testXXX 中調用正式代碼:
void testXXX(){
int result = myFun(1,2);
CPPUNIT_ASSERT_EQUAL(result,7);
result = myFun(10,70);
CPPUNIT_ASSERT_EQUAL(result,9);
}
每個 test 函數算一個測試基本元素。如果它裡面的所有 assert 都成功,這個 test 函數才算通過。
通常來說,測試所用的資料,一般不用寫在原始碼中,而是寫在 xml 或者 ini 或者其他檔案中。這樣的好處是測試時更改測試資料,不用重新編譯器,方便測試。
比較通用的方法是,寫一個 BaseTestCase 類,裡面處理好資料讀入、輸出,其它測試單元都從這個 BaseTestCase 繼承。
相對於 JUnit 而言,CppUnit 的不方便之處是新的測試程式需要加入測試 project,對於很多人同時在寫測試單元的時候,大家都在等別人修改完了測試 project自己才能進行,不太好。相對而言,Java 測試程式可以不需要任何 project 檔案。變通的方法是,將測試 project 拆分成多個子 project ,但是這樣一來就無法在一個測試程式中運行所有的測試。
CppUnit 的好處是運行速度比較快。