常见单元测试工具介绍
1.???????C/C++語言開發(fā)的首選利器- C++Test
?
?????????以前在windows平臺(tái)下的開發(fā),使用的框架主要是MFC,以及console工程(基于win32SDK),屬于純C/C++開發(fā)的范疇。
?????????因此,使用的單元測(cè)試工具,主要有C++Test和CppUnit兩種,其中又以前者為主。因?yàn)榫哂兄苯訉?dǎo)入VC工程,以及自動(dòng)生成測(cè)試集合、用例的優(yōu)點(diǎn),還是相當(dāng)好用的。不過這個(gè)軟件也有缺點(diǎn),就是修改測(cè)試用例時(shí),基本上不能引入被測(cè)代碼中的符號(hào)。舉個(gè)例子,除了測(cè)試用例中已經(jīng)生成的全局變量賦值語句,用戶如果想設(shè)定其他全局變量,或者定義一些指針類型-為了訪問某些全局?jǐn)?shù)組空間,最終會(huì)發(fā)現(xiàn),該測(cè)試用例無法運(yùn)行。
?????????顯然,這一缺點(diǎn),可以通過CppUnit中的手工編寫測(cè)試用例來解決。當(dāng)然,缺點(diǎn)就是沒法自動(dòng)生成測(cè)試用例了;你得一個(gè)一個(gè)的自己編寫。
?????????除過上面講到的缺點(diǎn),C++Test是一個(gè)非常優(yōu)秀的軟件,對(duì)于純C語言開發(fā)者,是非常便利和強(qiáng)大的。特別是對(duì)于嵌入式開發(fā)者,使用該軟件進(jìn)行單元測(cè)試,能夠極大地提高軟件質(zhì)量,避免target調(diào)試費(fèi)時(shí)費(fèi)力的缺點(diǎn)。
?????????當(dāng)然,前提條件是,將嵌入式系統(tǒng)的代碼,成功移植到Visual C++環(huán)境(使用VC編譯器替代原來的gcc或者arm定制編譯器)。需要注意的是,只要求編譯通過,不要求連接通過-鏈接需要的函數(shù)可以由C++Test自動(dòng)生成。
?????????在移植過程中,會(huì)遇到以下一些問題,這里給出筆者的簡單解決方法。
1)???匯編語言部分?–?如果能看懂,可以嘗試轉(zhuǎn)換為C代碼,否則屏蔽。
2)???特殊的函數(shù)標(biāo)記或編譯器偽指令(pragma系統(tǒng)),直接屏蔽。
3)???不要忘記把原編譯器中的預(yù)定義宏遷移到VC工程中。最常見的是,一些標(biāo)識(shí)CPU選項(xiàng)和debug等級(jí)的預(yù)定義宏。
筆者就曾經(jīng)將一個(gè)code warrior開發(fā)環(huán)境下的arm工程,遷移到VC2005中,最終使用C++Test完成了單元測(cè)試。有圖為證。
?
????筆者的這個(gè)工程,大約包含幾百個(gè)源文件。如果使用手工生成測(cè)試用例的方法,需要大量的測(cè)試人員和人力才能完成;并且還難于管理測(cè)試用例。使用C++Test之后,減輕了不少工作量。
其實(shí),該軟件還有一個(gè)優(yōu)點(diǎn)-提供測(cè)試覆蓋率統(tǒng)計(jì)和圖示。相信這一點(diǎn),也是單元測(cè)試的最終目標(biāo)-百分之百覆蓋,所非常有利的工具了。
?
?
2.???????.Net環(huán)境單元測(cè)試的首選利器- Nunit
?
目前windows平臺(tái)下的最流行開發(fā)環(huán)境,非屬.Net開發(fā)環(huán)境莫屬。基于該環(huán)境,微軟提供了ManagedC++/VB/C#等開發(fā)語言,吸引了不少粉絲。當(dāng)然,微軟的東西,都是集成在Visual Studio中的,連帶著也產(chǎn)生了單元測(cè)試工具-不過只在team版本中才有。
不過經(jīng)過比較,筆者還是推薦Nunit。首先這個(gè)軟件是免費(fèi)的,其次很強(qiáng)大,應(yīng)用起來也很方便。只要仿照自帶的例子,編寫相應(yīng)的測(cè)試類就行了-當(dāng)然,必須引入“NUnit.Framework”包。
下圖是個(gè)簡單的例子,取材于該軟件的samples.
?
完成工程的解釋和鏈接后,可以通過Nunit,定位到該工程生成的“dll”文件進(jìn)行測(cè)試。
?
?
3.???????Java環(huán)境單元測(cè)試的終極利器- Junit
?
從事Android開發(fā)之后,因?yàn)?/span>eclipse的緣故,選擇了Junit作為測(cè)試工具。其實(shí),parasoft公司的J++Test也是不錯(cuò)的選擇;不過Android開發(fā)包內(nèi)置支持Junit,顯然更加值得推薦。
下面引用一個(gè)android開發(fā)包中的例子,進(jìn)行簡單的說明。這個(gè)例子,讀者可以在“android\android-sdk-windows\samples\android-8\ApiDemos\tests”中找到。這個(gè)例子代表的工程,就是一個(gè)用于android平臺(tái)應(yīng)用程序(JAVA代碼)單元測(cè)試的Junit測(cè)試工程。
?
?
與上一節(jié)中提到的測(cè)試源文件編寫類似,需要引入“android.test.ActivityInstrumentationTestCase2”包,才能引入測(cè)試驅(qū)動(dòng)并且成功連接到測(cè)試驅(qū)動(dòng)入口。當(dāng)然,可供使用的測(cè)試用例原型有很多,不止這一個(gè)類型;比較常用的還有“android.test.AndroidTestCase”。
?????????實(shí)際測(cè)試時(shí),可以選定任意的android終端進(jìn)行。在這個(gè)實(shí)例中,筆者選定的是android模擬器。測(cè)試完成后,eclipse的Junit面板,會(huì)顯示測(cè)試用例的執(zhí)行結(jié)果;可惜的是,仍然沒有覆蓋率統(tǒng)計(jì)。
?????????
?
4.???????其他常用語言的單元測(cè)試工具
除了上文提到的幾種開發(fā)語言和平臺(tái),在日常編程活動(dòng)中,可能會(huì)遇到的還有perl,tcl,python等OO語言。
一般來說,這些語言有著龐大的第三方package支持。因此,一般來說,類似于android平臺(tái)內(nèi)置支持Junit框架,這些語言也有相應(yīng)的支持。舉個(gè)例子,perl支持包列表,自從perl語言創(chuàng)世以來,perl testing這個(gè)模塊就支持全面的測(cè)試。感興趣的讀者,可以閱讀一下這方面的書籍。
總結(jié)
以上是生活随笔為你收集整理的常见单元测试工具介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 100个Python实战项目(二)使用
- 下一篇: JSP javaweb餐厅点餐系统源码(