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