什么是單元測試?
單元測試是開發者編寫的一小段代碼,用於檢驗被測代碼的一個很小的、很明確的功能是否正確。通常而言,一個單元測試是用於判斷某個特定條件(或者場景)下某個特定函數的行為。例如,你可能把一個很大的值放入一個有序list 中去,然后確認該值出現在list 的尾部。或者,你可能會從字符串中刪除匹配某種模式的字符,然后確認字符串確實不再包含這些字符了。
執行單元測試,是為了證明某段代碼的行為確實和開發者所期望的一致。
為什么需要單元測試?
當編寫項目的時刻,如果我們假設底層的代碼是正確無誤的,那么先是高層代碼中使用了底層代碼;然后這些高層代碼又被更高層的代碼所使用,如此往復。當基本的底層代碼不再可靠時,那么必需的改動就無法只局限在底層。雖然你可以修正底層的問題,但是這些對底層代碼的修改必然會影響到高層代碼。於是,一個對底層代碼的修正,可能會導致對幾乎所有代碼的一連串改動,從而使修改越來越多,也越來越復雜。從而使整個項目也以失敗告終。
單元測試針對程序模塊,進行正確性檢驗的測試。其目的在於發現各模塊內部可能存在的各種差錯。單元測試需要從程序的內部結構出發設計測試用例。多個模塊可以平行地獨立進行單元測試。
① 單元測試的內容
模塊接口測試:對通過被測模塊的數據流進行測試。為此,對模塊接口,包括參數表、調用子模塊的參數、全程數據、文件輸入/輸出操作都必須檢查。
局部數據結構測試:設計測試用例檢查數據類型說明、初始化、缺省值等方面的問題,還要查清全程數據對模塊的影響。
路徑測試:選擇適當的測試用例,對模塊中重要的執行路徑進行測試。對基本執行路徑和循環進行測試可以發現大量路徑錯誤。
錯誤處理測試:檢查模塊的錯誤處理功能是否包含有錯誤或缺陷。例如,是否拒絕不合理的輸入;出錯的描述是否難以理解、是否對錯誤定位有誤、是否出錯原因報告有誤、是否對錯誤條件的處理不正確;在對錯誤處理之前錯誤條件是否已經引起系統的干預等。
邊界測試:要特別注意數據流、控制流中剛好等於、大於或小於確定的比較值時出錯的可能性。對這些地方要仔細地選擇測試用例,認真加以測試。
此外,如果對模塊運行時間有要求的話,還要專門進行關鍵路徑測試,以確定最壞情況下和平均意義下影響模塊運行時間的因素。這類信息對進行性能評價是十分有用的。
② 單元測試的步驟
通常單元測試在編碼階段進行。在源程序代碼編制完成,經過評審和驗證,確認沒有語法錯誤之后,就開始進行單元測試的測試用例設計。利用設計文檔,設計可以驗證程序功能、找出程序錯誤的多個測試用例。對於每一組輸入,應有預期的正確結果。
模塊並不是一個獨立的程序,在考慮測試模塊時,同時要考慮它和外界的聯系,用一些輔助模塊去模擬與被測模塊相聯系的其它模塊。這些輔助模塊分為兩種:
驅動模塊:相當於被測模塊的主程序。它接收測試數據,把這些數據傳送給被測模塊,最后輸出實測結果。
樁模塊:用以代替被測模塊調用的子模塊。樁模塊可以做少量的數據操作,不需要把子模塊所有功能都帶進來,但不允許什么事情也不做。
被測模塊、與它相關的驅動模塊及樁模塊共同構成了一個“測試環境”,見圖1。
如果一個模塊要完成多種功能,且以程序包或對象類的形式出現,例如Ada中的包,Modula中的模塊,C++中的類。這時可以將這個模塊看成由幾個小程序組成。對其中的每個小程序先進行單元測試要做的工作,對關鍵模塊還要做性能測試。對支持某些標准規程的程序,更要着手進行互聯測試。有人把這種情況特別稱為模塊測試,以區別單元測試。
http://www.51testing.com/html/62/n-185162.html