通過這樣一個(gè)簡(jiǎn)單的Test Case測(cè)試了4個(gè)可能存在的錯(cuò)誤:
load函數(shù)返回值
getData函數(shù)返回值
number結(jié)構(gòu)的成員值
string結(jié)構(gòu)的成員值
storeTest要復(fù)雜一些,因?yàn)樾枰裦ixture中的數(shù)據(jù)存儲(chǔ)到臨時(shí)文件中,之后打開兩個(gè)文件(新的臨時(shí)文件和外部文件),讀出數(shù)據(jù)并比照內(nèi)容。代碼如下:
void DiskDataTestCase::storeTest()
{
DATA d;
DWORD tmpSize, auxSize;
BYTE *tmpBuff, *auxBuff;
TCHAR absoluteFilename[MAX_PATH];
DWORD size = MAX_PATH;
// 填充結(jié)構(gòu)體
d.number = FILE_NUMBER;
strcpy(d.string, FILE_STRING);
// 相對(duì)路徑轉(zhuǎn)化為路徑
strcpy(absoluteFilename, AUX_FILENAME);
CPPUNIT_ASSERT( RelativeToAbsolutePath(absoluteFilename, &size) );
// 執(zhí)行操作
fixture->setData(&d);
CPPUNIT_ASSERT( fixture->store("data.tmp") );
// 讀出兩文件的內(nèi)容并對(duì)比
// ReadAllFileInMemory 是一個(gè)分配緩沖區(qū)的外部函數(shù)
// 把文件內(nèi)容存入其中. 調(diào)用函數(shù)負(fù)責(zé)釋放緩沖區(qū).
tmpSize = ReadAllFileInMemory("data.tmp", tmpBuff);
auxSize = ReadAllFileInMemory(absoluteFilename, auxBuff);
// 文件不存在則拋出異常
CPPUNIT_ASSERT_MESSAGE("New file doesn't exists?", tmpSize > 0);
CPPUNIT_ASSERT_MESSAGE("Aux file doesn't exists?", auxSize > 0);
// 文件大小可獲得,否則拋出異常
CPPUNIT_ASSERT(tmpSize != 0xFFFFFFFF);
CPPUNIT_ASSERT(auxSize != 0xFFFFFFFF);
// 緩沖區(qū)必須可用,否則拋出異常
CPPUNIT_ASSERT(tmpBuff != NULL);
CPPUNIT_ASSERT(auxBuff != NULL);
// 兩個(gè)文件的大小必須和DATA一致
CPPUNIT_ASSERT_EQUAL((DWORD) sizeof(DATA), tmpSize);
CPPUNIT_ASSERT_EQUAL(auxSize, tmpSize);
// 兩文件的內(nèi)容必須一致
CPPUNIT_ASSERT( 0 == memcmp(tmpBuff, auxBuff, sizeof(DATA)) );
delete [] tmpBuff;
delete [] auxBuff;
::DeleteFile("data.tmp");
}
啟動(dòng)用戶界面
后,看看如何顯示基于MFC的用戶界面對(duì)話框(事先在其內(nèi)部編譯了TestRunner.dll)。
打開實(shí)現(xiàn)類的文件(ProjectNameApp.cpp),把下列代碼復(fù)制到InitInstance方法中:
#include <cppunit/ui/mfc/TestRunner.h>
#include <cppunit/extensions/TestFactoryRegistry.h>
BOOL CMy_TestsApp::InitInstance()
{
....
// 聲明Test Runner,用以注冊(cè)的測(cè)試填入其中,并運(yùn)行
CppUnit::MfcUi::TestRunner runner;
runner.addTest( CppUnit::TestFactoryRegistry::getRegistry().makeTest() );
runner.run();
return TRUE;
}
很簡(jiǎn)單,不是嗎?只需要定義一個(gè)"runner"實(shí)例,添加注冊(cè)過的test(test是通過CPP文件中的CPPUNIT_TEST_SUITE_REGISTRATION宏注冊(cè)的),可以運(yùn)行run函數(shù)了。