三、CppUnit開發環境設置
認識了CppUnit的測試環境,想必你已經是在磨拳擦掌,準備在你的開發過程中感受一下測試驅動開發的感覺了。不過,在使用CppUnit前,還需要設置一下你的開發環境。
1、CppUnit的lib和dll
CppUnit為我們提供了兩套框架庫,一個為靜態的lib,一個為動態的dll。
cppunit project:靜態lib
cppunit_dll project:動態dll和lib
在開發中我們可以根據實際情況作出選擇。進入src文件夾,打開CppUnitLibraries.dsw。分別編譯這兩個project,輸出位置均為lib文件夾。
另外一個需要關注的project是TestRunner,它輸出一個dll,提供了一個基于GUI 方式的測試環境,即前面我們提到的兩種測試環境之一。我們也需要編譯這個project,輸出位置亦為lib文件夾。
為了方便開發,我們把這些編譯出來的lib和dll(包括Debug版和Release版) copy 到我們自己建立的一個文件夾中(當然你也可以不這么做),例如F:\cppunit1.9.0\lib\,同時我們也把CppUnit源代碼中include文件夾copy到我們自己的include文件夾下。然后在VC的tools/options/directories/include files和library files中設置include路徑和lib路徑。最后別忘了在你的project中link正確的lib。
2、在你的VC project中打開RTTI開關。
具體位置Project Settings/C++/C++ Language。
3、為TestRunner.dll設置環境變量
TestRunner.dll為我們提供了基于GUI的測試環境。為了讓我們的測試程序能正確的調用它,TestRunner.dll必須位于你的測試程序的路徑下。但最簡單的方法是在操作系統的環境變量Path中添TestRunner.dll的路徑,這樣是最省事的。
四、你的第一個TDD example
一切準備就緒,現在我們可以來看看怎樣添加測試代碼了。前面我們提到過,CppUnit最小的測試單位是TestCase,多個相關TestCase組成一個TestSuite。要添加測試代碼最簡單的方法就是利用CppUnit為我們提供的幾個宏來進行(當然還有其他的手工加入方法,但均是殊途同歸,大家可以查閱CppUnit頭文件中的演示代碼)。這幾個宏是:
CPPUNIT_TEST_SUITE() 開始創建一個TestSuite
CPPUNIT_TEST() 添加TestCase
CPPUNIT_TEST_SUITE_END() 結束創建TestSuite
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION() 添加一個TestSuite到一個指定的TestFactoryRegistry工廠
感興趣的朋友可以在HelperMacros.h看看這幾個宏的聲明,本文在此不做詳述。
1、一個實現兩個整數相加的類
假定我們要實現一個類,類名暫且取做CPlus,它的功能主要是實現兩個數相加(多簡單的一個類啊,這也要測試嗎?不要緊,我們只是了解怎樣加入測試代碼來測試它就行了,所以越簡單越好)。 假定這個類要實現的相加的方法是:
int Add(int nNum1, int nNum2);
Ok,那我們先來寫測試這個方法的代碼吧。TDD 可是先寫測試代碼,后寫產品代碼(CPlus)的哦!先寫的測試代碼往往是不能運行或編譯的,我們的目標是在寫好測試代碼后寫產品代碼,使之編譯通過,然后再進行重構。這就是Kent Beck說的“red/green/refactor”( 還記得基于GUI的測試環境的狀態條嗎?)。所以,上面的類名和方法應該還只是在你的心里,還只是你的idea而已。
2、在VC中為測試代碼建立一個 Project
通常,測試代碼和被測試對象是處于不同的Project中的。這樣就不會讓你的產品代碼被測試代碼所“污染 ”。
在本例中,我們將建立一個基于GUI 方式的測試環境。在VC中,我們建立一個基于對話框的Project。別忘了link正確的lib,本例中我們使用靜態的CppUnit lib。由于我們希望這個Project運行后顯示的是圖2這樣的界面,所以我們需要在App的 Instance()中屏蔽掉原有的對話框,代之以CppUnit的GUI。
文章來源于領測軟件測試網 http://www.kjueaiud.com/