測試過程如下
啟動程序
點(diǎn)擊“Run”
調(diào)用Call setUp()方法: 構(gòu)建我們的測試對象fixture
調(diào)用第一個測試方法
調(diào)用tearDown() 方法,清除對象
調(diào)用Call setUp()方法: 構(gòu)建我們的測試對象fixture
調(diào)用第一個測試方法
調(diào)用Call setUp()方法: 構(gòu)建我們的測試對象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
}
編寫測試用例
一旦我們知道我們要測什么之后,我們可以寫測試用例了。我們能夠執(zhí)行所有的我們需要的操作:使用普通庫函數(shù),第三方庫,win32api庫函數(shù),或簡單使用c++內(nèi)部操作
有時(shí)候,我們需要調(diào)用外部輔助文件或者數(shù)據(jù)庫,比較外部文件和內(nèi)部數(shù)據(jù)是否一致。
每發(fā)現(xiàn)一個錯誤時(shí)9比如發(fā)現(xiàn)內(nèi)部數(shù)據(jù)和外部數(shù)據(jù)不同我們創(chuàng)建一個異常,使用 CPPUNIT_FAIL(message) 來顯示異常信息。
檢測一個條件使用
CPPUNIT_ASSERT(condition):如果為false拋出異常
CPPUNIT_ASSERT_MESSAGE(message, condition): 如果為false拋出制定的信息。
CPPUNIT_ASSERT_EQUAL(expected,current): 檢測期望值
CPPUNIT_ASSERT_EQUAL_MESSAGE(message,expected,current): 當(dāng)比較值不相等時(shí)候拋出的制定的信息。
CPPUNIT_ASSERT_DOUBLES_EQUAL(expected,current,delta): 帶精度的比較
下面是測試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) );
}