對於單元測試中單元的含義,一般來說,要根據實際情況去判定其具體含義,如C語言中單元指一個函數,Java里單元指一個類,圖形化的軟件中可以指一個窗口或一個菜單等。總的來說,單元就是人為規定的最小的被測功能模塊。單元測試是在軟件開發過程中要進行的最低級別的測試活動,軟件的獨立單元將在與程序的其他部分相隔離的情況下進行測試。當然,在具體的測試實現中,也可能對應的是多個程序文件中的一組函數。
單元具有一些基本屬性,如明確的功能、規格定義、明確與其他部分的接口定義等,可以清晰的與同一程序的其它單元划分。
執行單元測試的目的
發現模塊內部邏輯、語法、算法和功能錯誤。
單元測試主要是基於白盒測試:
-
驗證代碼與設計相符度。
-
發現設計和需求中存在錯誤。
-
發現在編碼過程中引入的錯誤。
單元測試環境
單元本身不是一個獨立的程序,一個完整的可運行的軟件系統有若干個單元組成,所以必須為每個單元測試開發驅動單元和樁單元。
-
驅動單元(Driver):所測函數的主程序,它接收測試數據,並把數據傳遞給所測試單元,最后再輸出實際測試結果,當被測單元能完成相關單元時,也可以不需要驅動單元。
-
接收測試數據,包含測試用例輸入和預期輸出。
-
把測試用例輸入傳送給要測試的單元。
-
將被測單元的實際輸出和預期進行比較,得到測試結果。
-
將測試結果輸出到指定的位置。
-
-
樁單元(Stub):用來代替所測單元調用的子單元。
-
樁單元的功能是從測試角度模擬被調用的單元。
-
樁單元需要針對不同的輸入,返回不同的期望值,模擬不同的功能。
-
驅動單元執行被測函數得到實際的測試結果,那被測函數可能有其他依賴的函數,我們就要使用樁函數替代被測函數依賴的函數,驅動單元的執行依賴樁函數的正確性。
在展開測試的時候,有相應的測試策略可以使用。
插樁
單元測試的測試策略
孤立的測試策略
不考慮每個模塊與其他模塊之間的關系,為每個模塊設計樁模塊和驅動模塊,每個模塊進行獨立的單元測試。
優點是:
-
該方法最簡單,容易操作。
-
可以達到很高的結構覆蓋率。
-
可以展開並行。
-
該方法是純粹的單元測試。
缺點是樁函數和驅動函數工作量很大,效率不高。
自頂向下測試測試策略
方法是先對最頂層的單元進行測試,把頂層所調用的單元做成樁模塊,其次對於第二層進行測試,使用上面已經測試的單元做驅動模塊,如此類推直到測試完所有的模塊。
優點是可以節省驅動函數的開發工作量,測試效率高。
缺點是隨着被測單元的增加,測試過程變得越來越復雜,並且開發和維護成本將增加
自底向上的測試策略
方法是先對模塊調用層次圖上最底層的模塊進行單元測試,模擬調用該模塊的模塊做驅動模塊,然胡再對上面一層做單元測試,用下面已被測試過的模塊做樁模塊,一次類推, 直到測試完所有的模塊。
優點是可以節省樁函數的開發工作量,測試效率高。
缺點是不是純粹的單元測試,底層函數的測試質量對上層函數的測試將產生很大的影響。