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