單元測試是在開發階段由開發人員進行設計編寫的測試,在不同的組織中單元測試與被測試代碼實作先後順序不同,有的組織采用先實作被測試代碼,在編寫測試代碼,執行測試,有些組織采用先編寫測試代碼,執行測試,實作發生錯誤的被測試代碼,再執行測試。 根據的差別就是組織内部是否在實踐TDD開發方法。
在編寫單元測試時,有幾個方面需要考慮:
1、在測試一個方法時,如何構造被測試方法參數,如果參數類型比較簡單那麼比較容易構造,如果參數類型是複雜類型結構,并且存在多層結構,那麼就需要多考慮考慮。
2、在被測試方法中,有外部服務的調用或者外部子產品調用,調用結果影響測試結果,那麼如何考慮進行隔離。 因為外部服務或者外部子產品被調用方法的不同,針對每種調用方法都要相應的隔離技術,例如:
外部子產品調用類在全局變量中被定義圍靜态變量
外部子產品被調用類是通過參數對象傳遞給方法的
外部對象是一個全局靜态對象,在被測試方法内直接調用
外部對象是在被測試方法中,new 出來的新執行個體,并在方法體内調用
外部子產品是被隐式調用的,如被測試方法通路一個網絡服務端口擷取資訊
等等
3、結果驗證,單元測試要驗證那些資訊,按照方法結果展現形式的不同,有如下對象要驗證:
直接傳回值驗證
間接對象驗證 (如void 方法,它實作了對一個全局對象或内部私有對象執行個體的屬性修改,那麼要抓出對象執行個體并獲得屬性值驗證結果)
日志檔案輸出
控制台資訊輸出
網絡資料
如上要考慮的這些要考慮的方面,基本上都可以通過mock 進行處理。 mock 提供的是一種隔離技術,它提供如下幾種隔離辦法:
1、 完全隔離,mock整個被調用類方法
2、 部分隔離,mock部分被調用類方法
3、 服務樁隔離, 模拟被調用的服務。接受處理請求。
在基于java開發語言的項目上,可以使用PowerMock 作為Mock架構。