首先在project中打開RTTI開關(guān),具體位置在菜單Project/Settings/C++/C++ Language。如下圖所示設(shè)置:
由于CppUnit所用的動態(tài)運行期庫均為多線程動態(tài)庫,因此你的單元測試程序也得使用相應(yīng)設(shè)置,否則會發(fā)生沖突。于是我們在Project/Settings/C++/Code Generation中進行如下設(shè)置:
在Use run-time library一欄中,針對debug和release分別設(shè)置為‘Debug Multithreaded DLL’和‘Multithreaded DLL’。如下圖所示:
后別忘了在project中l(wèi)ink正確的lib。包括本例采用的cppunit.lib和cppunitd.lib靜態(tài)庫以及用于GUI方式的TestRunner.dll對應(yīng)的lib。具體位置在Project/Settings/Link/General
在‘Object/library modules’中,針對debug和release分別加入cppunitd.lib testrunnerd.lib和cppunit.lib TestRunner.lib。如下圖所示:
后,由于TestRunner.dll為我們提供了基于GUI的測試環(huán)境。為了讓我們的測試程序能正確的調(diào)用它,TestRunner.dll必 須位于你的測試程序的路徑下。所以把/lib目錄下的testrunnerd.dll和TestRunner.dll文件分別拷貝到UnitTest priject的程序debug和release版本輸出目錄中。如下圖所示:
(這是release版本)只要放在一起可以了。
配置工作終于完成,下面開始寫測試框架。
在CppUnit中, 是以TestCase為小的測試單位, 若干TestCase組成一個TestSuite。所以我們要先建立一個TestCase。
在UnitTest project中新建一個類, 命名為CPlusTestCase, 讓其從CppUnit::TestCase派生。為其新增一個方法,假設(shè)為 void testAdd(); 我們將在這個函數(shù)中寫入我們的一些測試代碼(還記得我們要測試的構(gòu)想中的CPlus::Add(…)嗎)。代碼如下:切記要包含頭文件
#include <cppunit/TestCase.h>
class CPlusTestCase : public CppUnit::TestCase
{
public:
CPlusTestCase ();
virtual ~ CPlusTestCase ();
void testAdd();
};
接下來, 我們要對我們的CPlusTestCase進行聲明。聲明用到了三個宏.
CPPUNIT_TEST_SUITE();
CPPUNIT_TEST();
CPPUNIT_TEST_SUITE_END();
第一個宏聲明一個測試包(suite),第二個宏聲明(添加)一個測試用例. 現(xiàn)在我們的CPlusTestCase類看上去象這樣:切記要包含頭文件,否則無法識別這些宏。
#include <cppunit/TestCase.h>
#include <CppUnit/extensions/HelperMacros.h>
class CPlusTestCase : public CppUnit::TestCase
{
CPPUNIT_TEST_SUITE(CPlusTestCase);
CPPUNIT_TEST(testAdd);
CPPUNIT_TEST_SUITE_END();
public:
CPlusTestCase ();
virtual ~ CPlusTestCase ();
void testAdd();
};
通過這幾個宏,我們把CPlusTestCase和testAdd注冊到了測試列表當中。
接下來,我們要注冊我們的測試suite. 使用CPPUNIT_TEST_SUITE_NAMED_REGISTRATION()來注冊一個測試suite. 這個宏的第二個參數(shù)是我們注冊的suite的名字. 在這里我們可以用字符串來代替, 但我們用一個靜態(tài)函數(shù)來返回這個suite的名字.
// PlusTestCase.h
class CPlusTestCase : public CppUnit::TestCase
{
CPPUNIT_TEST_SUITE(CPlusTestCase);
CPPUNIT_TEST(testAdd);
CPPUNIT_TEST_SUITE_END();
public:
CPlusTestCase ();
virtual ~ CPlusTestCase ();
void testAdd();
static std::string GetSuiteName();
};
// PlusTestCase.cpp
std::string CPlusTestCase::GetSuiteName()
{
return " CPlus ";
}
記得要在PlusTestCase.h中包含 #include <string>
然后在 PlusTestCase.cpp注冊我們的suite.
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(CPlusTestCase, CPlusTestCase::GetSuiteName());
它將CPlusTestCase這個TestSuite注冊到一個指定的TestFactory工廠中。
接下來我們寫一個注冊函數(shù)static CppUnit::Test* GetSuite(), 使其在運行期生成一個Test.