亚洲好骚综合-亚洲黄色录像-亚洲黄色网址-亚洲黄色网址大全-99久久99久久-99久久99久久精品国产

您的位置:軟件測試 > 開源軟件測試 > 開源單元測試工具 > cppUnit
用CPPUnit做單元測試
作者:網絡轉載 發布時間:[ 2013/3/4 16:11:41 ] 推薦標簽:

下面是單元測試類的定義:
#if !defined(DISKDATA_TESTCASE_H_INCLUDED)
#define DISKDATA_TESTCASE_H_INCLUDED

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include <cppunit/TestCase.h>//為了從基類TestCase派生新的測試類
#include <cppunit/extensions/HelperMacros.h>//方便快速定義測試類的宏

#include "DiskData.h"

class DiskDataTestCase : public CppUnit::TestCase
{
    CPPUNIT_TEST_SUITE(DiskDataTestCase);//定義Test Suite的起點
 CPPUNIT_TEST(loadTest);//定義Test Case
 CPPUNIT_TEST(storeTest);
    CPPUNIT_TEST_SUITE_END();//定義Test Suite的終點

public:
    void setUp();
    void tearDown();

protected:
    void loadTest();
    void storeTest();

private:
    DiskData *fixture;
};

#endif

例程中,DiskDataTestCase類重載了兩個方法:setUp()和tearDown()。這兩個方法在Test Case開始和結束的時候自動運行。

測試邏輯是在兩個Protected方法中實現的,稍后要涉及到如何為測試邏輯編碼。

例程的后定義了指向DiskData類型數據的指針fixture,用以保存測試過程中的目標對象。setUp()是初始化函數,在調用每一個Test Case之前調用setUp(),同時負責初始化目標對象。Test Case運行過程中要使用fixture。在每一個Test Case運行結束之后,調用tearDown()銷毀fixture。這樣,每次運行Test Case時所使用的都是新產生的fixture。

測試步驟如下:
 開啟測試程序
 點擊“Run”按鍵
 調用setUp()方法:初始化fixture
 調用第一個Test Case函數
 調用tearDown()方法:釋放fixture
 調用setUp()方法:初始化fixture
 調用第二個Test Case函數
 調用tearDown()方法:釋放fixture
 ...

經過編碼:
#include "DiskDataTestCase.h"

CPPUNIT_TEST_SUITE_REGISTRATION(DiskDataTestCase);


void DiskDataTestCase::setUp()
{
    fixture = new DiskData();
}

void DiskDataTestCase::tearDown()
{
    delete fixture;
    fixture = NULL;
}


void DiskDataTestCase::loadTest()
{
    // our load test logic
}


void DiskDataTestCase::storeTest()
{
    // our store test logic
}

現在,編碼已經變得非常簡單了:setUp()和tearDown()實現了創建、釋放fixture,下面要做的是為loadTest()、storeTest()編碼了。

Test Case編碼

搞清楚需要測試那些方面之后的工作是編碼實現。可以通過使用庫函數、第三方庫函數、Win32 API或者C/C++操作符和指令的內部屬性。

有時需要輔助的文件或者數據庫表來存儲正確的數據。在本例中,通過對比內部不數據和外部文件的數據來判斷結果是否正確。

當出現錯誤時(比如內部數據和外部數據不同),需要拋出異常。可以通過CPPUNIT_FAIL(message)宏實現,也可以通過assertions宏實現。
以下是一些常用的assertion宏:
 CPPUNIT_ASSERT(condition): 檢查condition,如為false,拋出異常
 CPPUNIT_ASSERT_MESSAGE(message, condition): 檢查condition,如為false,拋出異常,并顯示預先設定的信息
 CPPUNIT_ASSERT_EQUAL(expected,current): 檢查expected與current的值是否相等,拋出異常,顯示expected和current的值
 CPPUNIT_ASSERT_EQUAL_MESSAGE(message,expected,current): 檢查expected的值與actual的值是否相等,拋出異常,顯示expected,current的值,并顯示預先設定的信息
 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected,current,delta): 檢查expected, current之差是否小于delta,如果不小于,顯示expected和current的值

下面講一下loadTest編碼的編碼構想:首先需要一個外部文件,其中存儲這一個DATA型數據,文件的創建方式并不重要,關鍵是要保證里面的數據的正確性。然后,要進行的操作是檢查load函數從外部文件中讀出的數據和實現存在其中的數據是否一致。代碼如下:
//
// 前提:外部文件中已存儲了正確的數據。
//
#define AUX_FILENAME    "ok_data.dat"
#define FILE_NUMBER    19
#define FILE_STRING    "this is correct text stored in auxiliar file"

void DiskDataTestCase::loadTest()
{
    // 相對路徑轉化為路徑
    TCHAR    absoluteFilename[MAX_PATH];
    DWORD    size = MAX_PATH;

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

    // 執行操作
    CPPUNIT_ASSERT( fixture->load(absoluteFilename) );

    // 通過assertion檢查運行結果
    LPDATA    loadedData = fixture->getData();

    CPPUNIT_ASSERT(loadedData != NULL);
    CPPUNIT_ASSERT_EQUAL(FILE_NUMBER, loadedData->number);
    CPPUNIT_ASSERT( 0 == strcmp(FILE_STRING,
            fixture->getData()->string) );
}

上一頁1234下一頁
軟件測試工具 | 聯系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網站地圖
滬ICP備07036474 2003-2017 版權所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd
主站蜘蛛池模板: 天天宗合网| 日本天堂在线播放 | 男女男精品视频网站 | 免费视频成人 | 国产日韩精品一区在线不卡 | 欧美日韩精选 | 亚洲美色视频 | 中文字幕在线视频播放 | 久久精品视频91 | 国产精品视_精品国产免费 国产精品视频a | 激情综合网五月 | 国产精品视频网 | 青草欧美 | 亚洲三级国产 | 5566成人免费视频观看 | 国99久9在线 | 免费 | 日韩精品一区二区三区在线观看l | 午夜看片未满十八勿进 | 午夜亚洲国产成人不卡在线 | 欧美怡春院 | 手机看理论片 | 欧美xxxxx000| 激情综合欧美 | 日韩最新网址 | 免费高清a级毛片在线播放 免费高清欧美一区二区视频 | 500福利国产精品导航在线 | www.色黄| 一本色道久久综合亚洲精品高清 | 欧美性猛交xxxxxxxx软件 | 日本xx网站 | 免费国产之a视频 | 亚洲福利二区 | 欧美色欧美亚洲高清图片 | 欧美视频一级 | 中文在线日本免费永久18近 | 午夜黄色福利 | 黄篇免费看 | 又黄又爽视频在线观看 | 日本一区二区视频 | 精品小视频在线观看 | 性色毛片免费视频 |