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

您的位置:軟件測試 > 開源軟件測試 > 開源單元測試工具 >
用cpp做C單元測試
作者:網絡轉載 發布時間:[ 2013/2/19 16:17:19 ] 推薦標簽:

編寫測試用例

  一旦我們知道我們要測什么之后,我們可以寫測試用例了。我們能夠執行所有的我們需要的操作:使用普通庫函數,第三方庫,win32api庫函數,或簡單使用c++內部操作

  有時候,我們需要調用外部輔助文件或者數據庫,比較外部文件和內部數據是否一致。

  每發現一個錯誤時9比如發現內部數據和外部數據不同我們創建一個異常,使用 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): 當比較值不相等時候拋出的制定的信息。
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) );
}

  在這個case我們得到四個可能的錯誤:

load method's return value
getData method's return value
number structure member's value
string structure member's value

  第二個用例也是相似的。但是困難點,我們需要使用已知的數據來填充fixture,把它存在磁盤臨時文件里,然后打開兩個文件(新的和輔助文件),讀并比較內容,兩者如一致正確

void DiskDataTestCase::storeTest()
{
DATA d;
DWORD tmpSize, auxSize;
BYTE *tmpBuff, *auxBuff;
TCHAR absoluteFilename[MAX_PATH];
DWORD size = MAX_PATH;

// configures structure with known data
d.number = FILE_NUMBER;
strcpy(d.string, FILE_STRING);

// convert from relative to absolute path

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

// executes action
fixture->setData(&d);
CPPUNIT_ASSERT( fixture->store("data.tmp") );

// Read both files contents and check results
// ReadAllFileInMemory is an auxiliar function which allocates a buffer
// and save all file content inside it. Caller should release the buffer.
tmpSize = ReadAllFileInMemory("data.tmp", tmpBuff);
auxSize = ReadAllFileInMemory(absoluteFilename, auxBuff);

// files must exist
CPPUNIT_ASSERT_MESSAGE("New file doesn't exists?", tmpSize > 0);
CPPUNIT_ASSERT_MESSAGE("Aux file doesn't exists?", auxSize > 0);

// sizes must be valid
CPPUNIT_ASSERT(tmpSize != 0xFFFFFFFF);
CPPUNIT_ASSERT(auxSize != 0xFFFFFFFF);

// buffers must be valid
CPPUNIT_ASSERT(tmpBuff != NULL);
CPPUNIT_ASSERT(auxBuff != NULL);

// both file's sizes must be the same as DATA's size
CPPUNIT_ASSERT_EQUAL((DWORD) sizeof(DATA), tmpSize);
CPPUNIT_ASSERT_EQUAL(auxSize, tmpSize);

// both files content must be the same
CPPUNIT_ASSERT( 0 == memcmp(tmpBuff, auxBuff, sizeof(DATA)) );

delete [] tmpBuff;
delete [] auxBuff;

::DeleteFile("data.tmp");
}


調用用戶接口

  后,我們看看用一個mfc 對話框(TestRunner.dll)用來說明。

  我們需要在我們的初始化函數中做如下初始化

#include <cppunit/ui/mfc/TestRunner.h>
#include <cppunit/extensions/TestFactoryRegistry.h>

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

// declare a test runner, fill it with our registered tests and run them
CppUnit::MfcUi::TestRunner runner;

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

runner.run();

return TRUE;
}

  只要定義一個test的實例,然后注冊所有用例,在跑case。

上一頁123下一頁
軟件測試工具 | 聯系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網站地圖
滬ICP備07036474 2003-2017 版權所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd
主站蜘蛛池模板: 国产男女视频 | 亚洲人成在线观看一区二区 | 97人人做人人爽人人喊 | 大伊香蕉精品一区视频在线 | 美国黄色一级毛片 | 欧美一级亚洲一级 | 性刺激欧美三级在线现看中文 | 黄色在线小视频 | 国产成人91 | 欧美国产综合在线 | 午夜剧院官方 | 亚洲mv国产精品mv日本mv | 秋霞国产在线 | 两性午夜性刺激在线观看免费 | 婷婷中文字幕 | 成人a大片高清在线观看 | 亚洲精品色图 | 亚洲一本| 欧美日本高清一本二本三本 | 亚洲日本一区二区三区在线不卡 | 嘿嘿嘿视频在线观看网站 | 野花视频在线观看-高清中文 | 成人羞羞视频国产 | 污91视频 | 成年福利片120秒体验区 | 日本3级网站 | 免费永久在线观看污污的网站 | 亚洲a免费 | 黄网站色成年片在线观看 | 韩国理论片最新第一页 | 亚洲综合一二三区 | 日韩最新网址 | 国产h在线| 在线久草视频 | 亚洲人成小说色在线 | 精品国产一区二区三区麻豆小说 | 手机在线免费观看毛片 | 久久网站免费 | 日韩一级黄色片 | 欧美亚洲日本一区 | 天天干天日 |