測(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): 帶精度的比較
下面是測(cè)試loadTest的例子,
//
// These are correct values stored in auxiliar file
//
#define AUX_FILENAME "ok_data.dat"
#define FILE_NUMBER 19
#define FILE_STRING "this is correct text stored in auxiliar file"
void DiskDataTestCase::loadTest()
{
// convert from relative to absolute path
TCHAR absoluteFilename[MAX_PATH];
DWORD size = MAX_PATH;
strcpy(absoluteFilename, AUX_FILENAME);
CPPUNIT_ASSERT( RelativeToAbsolutePath(absoluteFilename, &size) );
// executes action
CPPUNIT_ASSERT( fixture->load(absoluteFilename) );
// ...and check results with assertions
LPDATA loadedData = fixture->getData();
CPPUNIT_ASSERT(loadedData != NULL);
CPPUNIT_ASSERT_EQUAL(FILE_NUMBER, loadedData->number);
CPPUNIT_ASSERT( 0 == strcmp(FILE_STRING,
fixture->getData()->string) );
}