CppUnit單元測(cè)試工具
CppUnit也是對(duì)xUnit家族中的一個(gè)成員,C++語(yǔ)言實(shí)現(xiàn)的一個(gè)單元測(cè)試的框架,Micheal Feathers由JUnit移植過(guò)來(lái)了,GNULGPL條約。
CppUnit按照層次來(lái)管理測(cè)試,底層的是TestCase,當(dāng)有了幾個(gè)TestCase以后,可以將它們組織成TestFixture。在TestFixture中,可以建立被測(cè)試的類(lèi)的實(shí)例,并編寫(xiě)TestCase對(duì)類(lèi)實(shí)例進(jìn)行測(cè)試,多個(gè)TestFixture可以通過(guò)TestSuite來(lái)對(duì)測(cè)試進(jìn)行管理。
通過(guò)派生TestFixture類(lèi)來(lái)設(shè)計(jì)某個(gè)類(lèi)或某組相關(guān)功能的單元測(cè)試,F(xiàn)ixture定義公共函數(shù)setUp()初始化每個(gè)成員變量,tearDown()來(lái)釋放setUp中使用的資源。在每個(gè)測(cè)試中,CPPUNIT_ASSERT(bool)來(lái)判斷某個(gè)函數(shù)和表達(dá)式的正確性,在派生類(lèi)的聲明中,通過(guò)CPPUNIT_TEST來(lái)增加對(duì)應(yīng)的測(cè)試函數(shù),通過(guò)CPPUNIT_TEST_SUITE和CPPUNIT_TEST_SUITE_END來(lái)分裝所有的測(cè)試函數(shù),規(guī)定這些測(cè)試函數(shù)執(zhí)行的順序.
1 CppUnit單元測(cè)試環(huán)境的建立
1.1 在Linux下安裝
方法1:
在使用Ubuntu軟件庫(kù)中編譯好的了的庫(kù)文集和文檔,一條命令解決問(wèn)題:
sudo apt-get install libcppunit-dev libcppunit-doc 參考[1]
參考[2]介紹了一個(gè)有意思的東西,build-essential(包括libc6.so,libc6-dev.so,gcc以及make等工具),如果沒(méi)有這個(gè)基本包的話(huà),使用源代碼安裝編譯時(shí),./configure部分會(huì)報(bào)錯(cuò)。
方法2-使用源代碼編譯
CppUnit的官方網(wǎng)站:http://sourceforge.net/projects/cppunit/files/cppunit/
源代碼可以在官方網(wǎng)站上下載上下載,新CppUnit的版本是1.12.1(從官方網(wǎng)站上來(lái)看,這個(gè)版本是2008年2月20更新的,5年過(guò)去了都沒(méi)有更新,所以我做了一個(gè)CppUnit1.12.1的源碼包網(wǎng)盤(pán)的公開(kāi)鏈接: http://pan.baidu.com/share/link?shareid=1903199222&uk=556148328
tar-xzf cppunit-1.12.1.tar.gz
cd cppunit-1.12.1
./configure
make
make check
sudo make install
本來(lái)沒(méi)有什么好說(shuō)的,關(guān)鍵是出了點(diǎn)問(wèn)題,在使用make時(shí)報(bào)錯(cuò)了。錯(cuò)誤如下:
/bin/bash ../../libtool --tag=CXX --mode=link g++ -g -O2 -ldl -o DllPlugInTester DllPlugInTester.o CommandLineParser.o ../../src/cppunit/libcppunit.la -lm
mkdir .libs
g++ -g -O2 -o .libs/DllPlugInTester DllPlugInTester.o CommandLineParser.o -ldl ../../src/cppunit/.libs/libcppunit.so -lm
../../src/cppunit/.libs/libcppunit.so: undefined reference to `dlsym'
../../src/cppunit/.libs/libcppunit.so: undefined reference to `dlopen'
../../src/cppunit/.libs/libcppunit.so: undefined reference to `dlclose'
collect2: error: ld returned 1 exit status
make[2]: *** [DllPlugInTester] Error 1
make[2]: Leaving directory `/home/xc-pc/software/cppunit-1.12.1/src/DllPlugInTester'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/xc-pc/software/cppunit-1.12.1/src'
make: *** [all-recursive] Error 1
也不知道是因?yàn)樽约旱淖约旱乃惭b的CppUnit的版本的問(wèn)題還是其他的問(wèn)題。(看起來(lái)這個(gè)錯(cuò)誤夠嚇人,對(duì)比到CppUnit的Makefile文件有800多行,會(huì)覺(jué)得出個(gè)錯(cuò)誤沒(méi)什么)
解決方案:
從上面的出現(xiàn)的錯(cuò)誤可以看出,是cppunit-1.12.1/src/DllPlugInTester目錄下編譯發(fā)生了錯(cuò)誤,也是說(shuō)是那個(gè)目錄下的Makefile出了問(wèn)題,cd 到cppunit-1.12.1/src/DllPlugInTester目錄,使用vi(或者其他的編輯器,如emacs,gedit)打開(kāi)Makefile.找到LIBS= -lm,將LIBS= -lm 改為L(zhǎng)IBS= -lm -ldl
需要進(jìn)行相應(yīng)的修改的還有cppunit-1.12.1/examples/simple目錄下的Makefile文件.
至此,再重新make一下,可以看到?jīng)]有報(bào)錯(cuò)了。然后可以繼續(xù)下去了。如果嫌源代碼安裝的方式太過(guò)于繁瑣,尤其是出了問(wèn)題之后。