您的位置:軟件測(cè)試 > 開(kāi)源軟件測(cè)試 > 開(kāi)源單元測(cè)試工具 > cppUnit
用cpp做c++單元測(cè)試
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2013/3/18 14:02:48 ] 推薦標(biāo)簽:

使用 CPPUnit

你能在這里http://cppunit.sourceforge.net/得到新的CPPUnit 版本, 你能發(fā)現(xiàn)所有的庫(kù) , 文獻(xiàn), 例子和其它有趣的材料。(我下載了版本為1.8.0 并且這個(gè)頒布工作良好)

在Win32里, 你能在VC++ 之下(6.0 和以后版本)使用CPPUnit , 但是當(dāng)CPPUnit 使用ANSI C++, 有少量接口時(shí)針對(duì)其它環(huán)境象C++Builder。

在CPPUnit發(fā)布版本里面,所有建造庫(kù)的步驟和信息,可以在INSTALL-WIN32.txt文件找到,。當(dāng)所有二進(jìn)制文件被構(gòu)建之后, 你能寫(xiě)你自己的測(cè)試集了。

想在VC中寫(xiě)自己的測(cè)試程序,可以按照以下步驟:
建立一個(gè)MFC的對(duì)話框(或文檔視圖結(jié)構(gòu))
允許時(shí)間類(lèi)型信息,Alt+F7 --> C/C++ --> C++ language --> Enable RTTI
把Cppunitinlude放到include目錄:Tools - Options - Directories - Include.
用cppunitd.lib (靜態(tài)連接) 或者cppunitd_dll.lib (動(dòng)態(tài)鏈接),testrunnerd.lib來(lái)鏈接你的程序。
如果動(dòng)態(tài)鏈接,要把testrunnerd.dll 拷到應(yīng)用程序目錄來(lái)運(yùn)行。

Ok,看一下測(cè)試用例的類(lèi)的定義吧。

#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>
#include <cppunit/extensions/HelperMacros.h>

#include "DiskData.h"

class DiskDataTestCase : public CppUnit::TestCase
{
  CPPUNIT_TEST_SUITE(DiskDataTestCase);
      CPPUNIT_TEST(loadTest);
      CPPUNIT_TEST(storeTest);
  CPPUNIT_TEST_SUITE_END();

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

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

private:
    DiskData *fixture;  
};

#endif
首先, 必須包含TestCase.h和HelperMacros.h. 第一步,我們的從我們的Testcase基類(lèi)配生的新類(lèi)。第二,用一些宏使我們的定義的更方便,如 CPPUNIT_TEST_SUITE (開(kāi)始測(cè)試定義), CPPUNIT_TEST (定義一個(gè)測(cè)試用例) 或 CPPUNIT_TEST_SUITE_END (結(jié)束一個(gè)測(cè)試集).

我們的類(lèi)(DiskDataTestCase)有重載了兩個(gè)方法setUp()和tearDown(). 一個(gè)開(kāi)始,一個(gè)結(jié)束測(cè)試。

測(cè)試過(guò)程如下

啟動(dòng)程序
點(diǎn)擊“Run”
調(diào)用Call setUp()方法: 構(gòu)建我們的測(cè)試對(duì)象fixture
調(diào)用第一個(gè)測(cè)試方法
調(diào)用tearDown() 方法,清除對(duì)象
調(diào)用Call setUp()方法: 構(gòu)建我們的測(cè)試對(duì)象fixture
調(diào)用第一個(gè)測(cè)試方法
調(diào)用Call setUp()方法: 構(gòu)建我們的測(cè)試對(duì)象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
}


編寫(xiě)測(cè)試用例
一旦我們知道我們要測(cè)什么之后,我們可以寫(xiě)測(cè)試用例了。我們能夠執(zhí)行所有的我們需要的操作:使用普通庫(kù)函數(shù),第三方庫(kù),win32api庫(kù)函數(shù),或簡(jiǎn)單使用c++內(nèi)部操作

有時(shí)候,我們需要調(diào)用外部輔助文件或者數(shù)據(jù)庫(kù),比較外部文件和內(nèi)部數(shù)據(jù)是否一致。
每發(fā)現(xiàn)一個(gè)錯(cuò)誤時(shí)9比如發(fā)現(xiàn)內(nèi)部數(shù)據(jù)和外部數(shù)據(jù)不同我們創(chuàng)建一個(gè)異常,使用 CPPUNIT_FAIL(message) 來(lái)顯示異常信息。

檢測(cè)一個(gè)條件使用
CPPUNIT_ASSERT(condition):如果為false拋出異常
CPPUNIT_ASSERT_MESSAGE(message, condition): 如果為false拋出制定的信息。
CPPUNIT_ASSERT_EQUAL(expected,current): 檢測(cè)期望值
CPPUNIT_ASSERT_EQUAL_MESSAGE(message,expected,current): 當(dāng)比較值不相等時(shí)候拋出的制定的信息。
CPPUNIT_ASSERT_DOUBLES_EQUAL(expected,current,delta): 帶精度的比較

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