操作系統:
軟件版本:cppunit-1.12.0.tar.gz
代碼調試通過
一、 CppUnit的原理
先簡單介紹幾個CppUnit的基本術語:
1、Fixture:一個或一組測試用例的測試對象。可以是你要測試的對象或者函數。
2、TestCase:測試用例。是對測試對象的某個功能或流程編寫的測試代碼。對一個Fixture,可能有多個測試用例。
3、TestSuite:同時運行的測試用例的集合。可以是一個fixture的多個測試函數、也可以是多個fixture的所有測試用例。
使用時,在測試的主文件中將TestCase註冊到TestSuite中,並運行。
二、 下載與安裝
可以在http://sourceforge.net/projects/cppunit/找到最新的源碼並下載至本地。我下載的版本是cppunit-1.12.0.tar.gz
解壓:tar -zxvf cppunit-1.12.0.tar.gz
進入cppunit-1.12.0的目錄
//因爲我是非root用戶,沒有對/usr/local/lib/和/usr/include的相應權限,//所以將安裝的根目錄設置爲我的個人目錄
.configure –prefix=/home/me
make
make install
這樣,庫文件就複製到/home/me了。
還要將cppunit-1.12.0中的頭文件include複製到/home/me中。
三、利用cppunit建立測試的一般框架
通常將測試代碼和被測的代碼放在不同的工程裏面,以免對我們要測試的代碼造成污染,這也是運用cppunit的優點之一吧。
這樣我們便有兩個工程:
其一、待測工程:~/money
有兩個文件:
Money.h
Money.cpp
測試工程:~/MoneyTest
該工程下有三個文件:
Money_Test.h
Money_Test.cpp
Money_Test_Main.cpp
這三個文件的作用分別是:
Money_Test.h:聲明一個TestSuite,並將你所需要的測試用例都在此處進行聲明
Mone_Test.cpp:編寫測試用例
Money_Test_Main.cpp:運行測試。該文件與具體的測試用例無關。
CppUnit 提供的驗證成功失敗的方式有:
CPPUNIT_ASSERT(condition)
// 確信condition爲真
CPPUNIT_ASSERT_MESSAGE(message, condition)
// 當condition爲假時失敗, 並打印message
CPPUNIT_FAIL(message)
// 當前測試失敗, 並打印message
CPPUNIT_ASSERT_EQUAL(expected, actual)
// 確信兩者相等
CPPUNIT_ASSERT_EQUAL_MESSAGE(message, expected, actual)
// 失敗的同時打印message
CPPUNIT_ASSERT_DOUBLES_EQUAL(expected, actual, delta)
// 當expected和actual之間差大於delta時失敗
關於CPPUNIT_ASSERT_EQUAL還有一點要說明,該宏對於expected和actual是有要求的,也就是所謂的Requirement:
- 具有相同的類型(比如都是std::string)
- 可以使用<<序列化到std::strstream(assertion_traits<T>::toString中指明)
- 能用==作比較(assertion_traits<T>::equal中指明)
不過,後兩條可以通過爲assertion_traits定製特化版本去除掉。
四、編譯與調試
編譯、鏈接動態庫:
g++ -o test Money_Test.cpp Money_Test_Main.cpp ~/money/Money.cpp -I ~/money -I ~/cppunit/include -lcppunit -ldl -L ~/cppunit/lib
運行前要將共享庫的目錄放到LD_LIBRARY_PATH中。
export LD_LIBRARY_PATH=~/cppunit/lib:$LD_LIBRARY_PATH
運行:
./test
測試結果:
OK (4 tests)
說明所寫的4個測試用例均成功。
參考資料
Tx7do@上海半丁 Linux下的CppUnit 的HelloWorld手記
李羣:便利的開發工具 CppUnit 快速使用指南
http://www.ibm.com/developerworks/cn/linux/l-cppunit/index.html
CppUnit使用指南