您的位置:軟件測試 > 開源軟件測試 > 開源單元測試工具 > cppUnit
用CPPUnit做單元測試
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時間:[ 2013/3/4 16:11:41 ] 推薦標(biāo)簽:

通過這樣一個簡單的Test Case測試了4個可能存在的錯誤:
 load函數(shù)返回值
 getData函數(shù)返回值
 number結(jié)構(gòu)的成員值
 string結(jié)構(gòu)的成員值
 
storeTest要復(fù)雜一些,因為需要把fixture中的數(shù)據(jù)存儲到臨時文件中,之后打開兩個文件(新的臨時文件和外部文件),讀出數(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);

    // 相對路徑轉(zhuǎn)化為路徑

    strcpy(absoluteFilename, AUX_FILENAME);
    CPPUNIT_ASSERT( RelativeToAbsolutePath(absoluteFilename, &size) );

    // 執(zhí)行操作
    fixture->setData(&d);
    CPPUNIT_ASSERT( fixture->store("data.tmp") );

    // 讀出兩文件的內(nèi)容并對比
    // ReadAllFileInMemory 是一個分配緩沖區(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);

    // 兩個文件的大小必須和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");
}

啟動用戶界面
后,看看如何顯示基于MFC的用戶界面對話框(事先在其內(nèi)部編譯了TestRunner.dll)。

打開實現(xiàn)類的文件(ProjectNameApp.cpp),把下列代碼復(fù)制到InitInstance方法中:
#include <cppunit/ui/mfc/TestRunner.h>
#include <cppunit/extensions/TestFactoryRegistry.h>

BOOL CMy_TestsApp::InitInstance()
{
    ....

    // 聲明Test Runner,用以注冊的測試填入其中,并運行
    CppUnit::MfcUi::TestRunner runner;

    runner.addTest( CppUnit::TestFactoryRegistry::getRegistry().makeTest() );

    runner.run();   

    return TRUE;
}
 
很簡單,不是嗎?只需要定義一個"runner"實例,添加注冊過的test(test是通過CPP文件中的CPPUNIT_TEST_SUITE_REGISTRATION宏注冊的),可以運行run函數(shù)了。

上一頁1234下一頁
軟件測試工具 | 聯(lián)系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd