您的位置:軟件測試 > 開源軟件測試 > 開源單元測試工具 > cppUnit
CppUnit 快速使用指南
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2014/1/8 16:37:56 ] 推薦標(biāo)簽:開發(fā) CppUnit 開源

本文從開發(fā)人員的角度,介紹 CppUnit 框架,希望能夠使開發(fā)人員用少的代價(jià)盡快掌握這種技術(shù)。下面從基本原理,CppUnit 原理,手動(dòng)使用步驟,通常使用步驟,其他實(shí)際問題等方面進(jìn)行討論。以下討論基于 CppUnit1.8.0。
背景

CppUnit 是個(gè)基于 LGPL 的開源項(xiàng)目,初版本移植自 JUnit,是一個(gè)非常的開源測試框架。CppUnit 和 JUnit 一樣主要思想來源于極限編程(XProgramming)。主要功能是對單元測試進(jìn)行管理,并可進(jìn)行自動(dòng)化測試。這樣描述可能沒有讓您體會(huì)到測試框架的強(qiáng)大威力,那您在開發(fā)過程中遇到下列問題嗎?如果答案是肯定的,應(yīng)該學(xué)習(xí)使用這種技術(shù):

. 測試代碼沒有很好地維護(hù)而廢棄,再次需要測試時(shí)還需要重寫;
. 投入太多的精力,找 bug,而新的代碼仍然會(huì)出現(xiàn)類似 bug;
. 寫完代碼,心里沒底,是否有大量 bug 等待自己;
. 新修改的代碼不知道是否影響其他部分代碼;
. 由于牽扯太多,導(dǎo)致不敢進(jìn)行修改代碼;
...

這些問題下文都會(huì)涉及。這個(gè)功能強(qiáng)大的測試框架在國內(nèi)的 C++ 語言開發(fā)人員中使用的不是很多。本文從開發(fā)人員的角度,介紹這個(gè)框架,希望能夠使開發(fā)人員用少的代價(jià)盡快掌握這種技術(shù)。下面從基本原理,CppUnit 原理,手動(dòng)使用步驟,通常使用步驟,其他實(shí)際問題等方面進(jìn)行討論。以下討論基于 CppUnit1.8.0。

1. 基本原理

對于上面的問題僅僅說明 CppUnit 的使用是沒有效果的,下面先從測試的目的,測試原則等方面簡要說明,然后介紹 CppUnit 的具體使用。

首先要明確我們寫測試代碼的目的,是驗(yàn)證代碼的正確性或者調(diào)試 bug。這樣寫測試代碼時(shí)有了針對性,對那些容易出錯(cuò)的,易變的編寫測試代碼;而不用對每個(gè)細(xì)節(jié),每個(gè)功能編寫測試代碼,當(dāng)然除非有過量精力或者可靠性要求。

編碼和測試的關(guān)系是密不可分的,推薦的開發(fā)過程并不要等編寫完所有或者很多的代碼后再進(jìn)行測試,而是在完成一部分代碼,比如一個(gè)函數(shù),之后立刻編寫測試代碼進(jìn)行驗(yàn)證。然后再寫一些代碼,再寫測試。每次測試對所有以前的測試都進(jìn)行一遍。這樣做的優(yōu)點(diǎn)是,寫完代碼,也基本測試完一遍,心里對代碼有信心。而且在寫新代碼時(shí)不斷地測試?yán)洗a,對其他部分代碼的影響能夠迅速發(fā)現(xiàn)、定位。不斷編碼測試的過程也是對測試代碼維護(hù)的過程,以便測試代碼一直是有效的。有了各個(gè)部分測試代碼的保證,有了自動(dòng)測試的機(jī)制,更改以前的代碼沒有什么顧慮了。在極限編程(一種軟件開發(fā)思想)中,甚至強(qiáng)調(diào)先寫測試代碼,然后編寫符合測試代碼的代碼,進(jìn)而完成整個(gè)軟件。

根據(jù)上面說的目的、思想,下面總結(jié)一下平時(shí)開發(fā)過程中單元測試的原則:

先寫測試代碼,然后編寫符合測試的代碼。至少做到完成部分代碼后,完成對應(yīng)的測試代碼;
測試代碼不需要覆蓋所有的細(xì)節(jié),但應(yīng)該對所有主要的功能和可能出錯(cuò)的地方有相應(yīng)的測試用例;
發(fā)現(xiàn) bug,首先編寫對應(yīng)的測試用例,然后進(jìn)行調(diào)試;
不斷總結(jié)出現(xiàn) bug 的原因,對其他代碼編寫相應(yīng)測試用例;
每次編寫完成代碼,運(yùn)行所有以前的測試用例,驗(yàn)證對以前代碼影響,把這種影響盡早消除;
不斷維護(hù)測試代碼,保證代碼變動(dòng)后通過所有測試;
有上面的理論做指導(dǎo),測試行為可以有規(guī)可循。那么 CppUnit 如何實(shí)現(xiàn)這種測試框架,幫助我們管理測試代碼,完成自動(dòng)測試的?下面看看 CppUnit 的原理。

2. CppUnit 的原理

在 CppUnit 中,一個(gè)或一組測試用例的測試對象被稱為 Fixture(設(shè)施,下文為方便理解盡量使用英文名稱)。Fixture 是被測試的目標(biāo),可能是一個(gè)對象或者一組相關(guān)的對象,甚至一個(gè)函數(shù)。

有了被測試的 fixture,可以對這個(gè) fixture 的某個(gè)功能、某個(gè)可能出錯(cuò)的流程編寫測試代碼,這樣對某個(gè)方面完整的測試被稱為TestCase(測試用例)。通常寫一個(gè) TestCase 的步驟包括:

對 fixture 進(jìn)行初始化,及其他初始化操作,比如:生成一組被測試的對象,初始化值;
按照要測試的某個(gè)功能或者某個(gè)流程對 fixture 進(jìn)行操作;
驗(yàn)證結(jié)果是否正確;
對 fixture 的及其他的資源釋放等清理工作。
對 fixture 的多個(gè)測試用例,通常(1)(4)部分代碼都是相似的,CppUnit 在很多地方引入了 setUp 和 tearDown 虛函數(shù)?梢栽 setUp 函數(shù)里完成(1)初始化代碼,而在 tearDown 函數(shù)中完成(4)代碼。具體測試用例函數(shù)中只需要完成(2)(3)部分代碼即可,運(yùn)行時(shí) CppUnit 會(huì)自動(dòng)為每個(gè)測試用例函數(shù)運(yùn)行 setUp,之后運(yùn)行 tearDown,這樣測試用例之間沒有交叉影響。

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