闡述C++單元測(cè)試說(shuō)明指導(dǎo)說(shuō)明
本文敘述背景為:C++單元測(cè)試, Visual C++ 6.0, Windows2000。文中敘述有誤之處,敬請(qǐng)批評(píng)指正,測(cè)試驅(qū)動(dòng)開發(fā)式是極限編程的重要組成部分,看完本文你肯定有不少收獲,希望本文能教會(huì)你更多東西。
XUnit,一個(gè)基于測(cè)試驅(qū)動(dòng)開發(fā)的測(cè)試框架,它為我們?cè)陂_發(fā)過(guò)程中使用測(cè)試驅(qū)動(dòng)開發(fā)提供了一個(gè)方便的工具,使我們得以快速的進(jìn)行單元測(cè)試。XUnit的成員有很多,如JUnit,PythonUnit等。今天給大家介紹的CppUnit即是XUnit家族中的一員,它是一個(gè)專門面向C++的測(cè)試框架。
本文不對(duì)CppUnit源碼做詳細(xì)的介紹,而只是對(duì)CppUnit的應(yīng)用作一些介紹。在本文中,您將看到:
1、CppUnit源代碼的各個(gè)組成部分。
2、怎樣設(shè)置你的開發(fā)環(huán)境以能夠使用CppUnit。
3、怎樣為你的產(chǎn)品代碼添加測(cè)試代碼(實(shí)際上應(yīng)該反過(guò)來(lái),為測(cè)試代碼添加產(chǎn)品代碼。在TDD中,先有測(cè)試代碼后有產(chǎn)品代碼),并通過(guò)CppUnit來(lái)進(jìn)行測(cè)試。
一、CppUnit源碼組成
CppUnit測(cè)試框架的源代碼可以到 http://sourceforge.net/projects/cppunit/ 上下載。下載解壓后,主要的文件夾有: doc: CppUnit的說(shuō)明文檔。另外,代碼的根目錄,還有三個(gè)說(shuō)明文檔,分別是INSTALL,INSTALL-unix,INSTALL-WIN32.txt。 examples: CpppUnit提供的例子,也是對(duì)CppUnit自身的測(cè)試,通過(guò)它可以學(xué)習(xí)如何使用CppUnit測(cè)試框架進(jìn)行開發(fā)。
二、初識(shí)CppUnit測(cè)試環(huán)境
解壓源代碼包后,您一定急著想看看CppUnit到底是個(gè)什么樣?Ok,下面我們就來(lái)揭開CppUnit的神秘面紗:
1、進(jìn)入example文件夾,用VC打開examples.dsw。我們先來(lái)看看CppUnit自帶的測(cè)試?yán)?。這些例子都是針對(duì)CppUnit自身的單元測(cè)試集,一方面這是CppUnit作者開發(fā)CppUnit框架過(guò)程中寫的測(cè)試用例,另一方面,我們可以通過(guò)這些例子來(lái)學(xué)習(xí)如何在我們自己的工程中添加測(cè)試用例。
2、將CppUnitTestApp工程設(shè)為Active Project(Win32 Debug),編譯后運(yùn)行,則可以看到CppUnit的基于GUI方式進(jìn)行單元測(cè)試TestRunner的界面。點(diǎn)擊“Run”,
這是一個(gè)針對(duì)CppUnit的單元測(cè)試結(jié)果,它表明剛才我們做了11個(gè)測(cè)試,全部通過(guò)。 CppUnit將所有的單元測(cè)試按照樹的結(jié)構(gòu)來(lái)表示。在CppUnit中,最小的測(cè)試單元,稱為TestMethod測(cè)試方法,而多個(gè)相關(guān)的測(cè)試方法又可以組成一個(gè)TestCase測(cè)試用例。多個(gè)測(cè)試用例又組成TestSuite測(cè)試包。測(cè)試包互相嵌套在一起,就形成了上面我們看到的樹結(jié)構(gòu)。我們可以選擇其中任意的樹節(jié)點(diǎn)來(lái)進(jìn)行單元測(cè)試。
3、將CppUnitTestMain工程設(shè)置為Active Project(Win32 Debug),編譯并運(yùn)行,我們來(lái)看看另一個(gè)單元測(cè)試的環(huán)境 這是一個(gè)基于文本方式的單元測(cè)試環(huán)境。CppUnit提供了幾種測(cè)試環(huán)境,一種基于文本,一種基于GUI。
4、將HostApp工程設(shè)置為Active Project(Win32 Debug),編譯運(yùn)行。這亦是一個(gè)對(duì)CppUnit自身進(jìn)行的測(cè)試,只不過(guò)它向我們演示的是各種失敗的測(cè)試。在基于GUI的測(cè)試環(huán)境中,若測(cè)試不成功,進(jìn)度條顯示紅色,反之則為綠色。從測(cè)試結(jié)果我們可以看到失敗的單元測(cè)試名稱,引起測(cè)試不能通過(guò)的原因,以及測(cè)試失敗的語(yǔ)句所在的文件及所在行數(shù)。
三、C++單元測(cè)試設(shè)置 認(rèn)識(shí)了CppUnit的測(cè)試環(huán)境,想必你已經(jīng)是在磨拳擦掌,準(zhǔn)備在你的開發(fā)過(guò)程中感受一下測(cè)試驅(qū)動(dòng)開發(fā)的感覺了。不過(guò),在使用CppUnit前,還需要設(shè)置一下你的開發(fā)環(huán)境。
1、CppUnit的lib和dll
CppUnit為我們提供了兩套框架庫(kù),一個(gè)為靜態(tài)的lib,一個(gè)為動(dòng)態(tài)的dll。 在開發(fā)中我們可以根據(jù)實(shí)際情況作出選擇。進(jìn)入src文件夾,打開CppUnitLibraries.dsw。分別編譯這兩個(gè)project,輸出位置均為lib文件夾。
另外一個(gè)需要關(guān)注的project是TestRunner,它輸出一個(gè)dll,提供了一個(gè)基于GUI 方式的測(cè)試環(huán)境,即前面我們提到的兩種測(cè)試環(huán)境之一。我們也需要編譯這個(gè)project,輸出位置亦為lib文件夾。 #t#
為了方便開發(fā),我們把這些編譯出來(lái)的lib和dll(包括Debug版和Release版) copy 到我們自己建立的一個(gè)文件夾中(當(dāng)然你也可以不這么做),例如F:\cppunit1.9.0\lib\,同時(shí)我們也把CppUnit源代碼中include文件夾copy到我們自己的include文件夾下。然后在VC的tools/options/directories/include files和library files中設(shè)置include路徑和lib路徑。最后別忘了在你的project中l(wèi)ink正確的lib。
2、在你的C++單元測(cè)試中打開RTTI開關(guān)。 具體位置Project Settings/C++/C++ Language。
3、為TestRunner.dll設(shè)置環(huán)境變量
TestRunner.dll為我們提供了基于GUI的測(cè)試環(huán)境。為了讓我們的測(cè)試程序能正確的調(diào)用它,TestRunner.dll必須位于你的測(cè)試程序的路徑下。但最簡(jiǎn)單的方法是在操作系統(tǒng)的環(huán)境變量Path中添TestRunner.dll的路徑,這樣是最省事的。