淺談單元測試之(一):單元測試的意義
單元測試是檢查一個獨立工作單元的行為。在JAVA應用程式中,獨立工作單元經常是(但不總是)一個獨立的方法。相比之下,整合測試和驗收測試檢查的是各種元件如何互動。一個工作單元就是一項任務,不直接依賴於其他任何任務完成。以程式設計師的角度來看,一個典型的單元測試通常可以描述為:“確保方法接受預期範圍內的輸入,並且為每一次測試輸入返回預期的結果”。
單元測試的意義
① 單元測試集中注意力於程式的基本組成部分,首先保證每個單元測試通過,才能使下一步把單元組裝成部件並測試其正確性具有基礎。單元是整個軟體的構成基礎,像硬體系統中的零部件一樣,只有保證零部件的質量,這個裝置的質量才有基礎,單元的質量也是整個軟體質量的基礎。因此,單元測試的效果會直接影響軟體的後期測試,最終在很大程度上影響到產品的質量。
② 單元測試可以平行開展,這樣可以使多人同時測試多個單元,提高了測試的效率。
③ 單元規模較小,複雜性較低,因而發現錯誤後容易隔離和定位,有利於除錯工作。
④ 單元的規模和複雜性特點,使單元測試中可以使用包括白盒測試的覆蓋分析在內的許多測試技術,能夠進行比較充分細緻的測試,是整個程式測試滿足語句覆蓋和分支覆蓋要求的基礎。
⑤ 單元測試的測試效果是最顯而易見的。做好單元測試,不僅後期的系統整合聯調或整合測試和系統測試會很順利,節約很多時間;而且在單元測試過程中能發現一些很深層次的問題,同時還會發現一些很容易發現而在整合測試和系統測試很難發現的問題;更重要的是單元測試不僅僅是證明這些程式碼做了什麼,是如何做的,而且證明是否做了它該做的事情而沒有做不該做的事情。
⑥ 單元測試的好與壞不僅直接關係到測試成本(一個 bug 被隱藏的時間越長,修復這個 bug 的代價就越大。在《快速軟體開發》一書中已引用了大量的研究資料指出:最後才修改一個 bug 的代價是在 bug 產生時修改它的代價的10倍),而且也會直接影響到產品質量,因為可能就是由於程式碼中的某一個小錯誤就導致了整個產品的質量降低一個指標,或者導致更嚴重的後果。
單元測試的優點
①單元測試是一種驗證行為—— 測試和驗證程式中每一項功能的正確性,為以後的開發提供支援。
②單元測試是一種設計行為—— 編寫單元測試將使我們從呼叫者觀察、思考,特別是要先考慮測試,這樣就可把程式設計成易於呼叫和可測試的,並努力降低軟體中的耦合,還可以使編碼人員在編碼時產生預測試,將程式的缺陷降低到最小;常用單元測試框架 下面介紹幾個常用的單元測試框架: ①JUnit ,是一個Java語言的單元測試框架。它由Kent Beck和Erich Gamma建立,逐漸成為源於Kent Beck的sUnit的xUnit家族中最為成功的一個。 JUnit有它自己的JUnit擴充套件生態圈。多數Java的開發環境都已經集成了JUnit作為單元測試的工具。 ②TestNG,即Testing Next Generation,下一代測試技術。是根據JUnit和NUnit思想,採用 jdk 的 annotation 技術來強化測試功能並藉助XML 檔案強化測試組織結構 而構建的測試框架。TestNG 的強大之處還在於不僅可以用來做單元測試,還可以用來做整合測試。