C++ 單元測試工具 CppUnitTest

 

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 的好處是運行速度比較快。


發佈了93 篇原創文章 · 獲贊 2 · 訪問量 32萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章