2.4 單元測試工具
junit 、testng
2.5 控制點和檢查點
控制點:直接輸入(參數); 間接輸入(控制返回值和狀態);
檢查點: 直接輸出(值和狀態); 間接輸出(行為);
2.6 測試替身(Test Double)
類型: Dummy Objects、Test Stubs; Test Spies、 Mock Objects 、Fake Objects
Dummy Objects : 測試時用于填充且不做任何事情的對象。
Test Stubs: 替換被測代碼內部依賴的方法;
Test Spies: 記錄測試運行的日志,比如記錄次數;
Mock Objects : 充當Stub;和充當spies;
Fake Objects : 生成一個專用于測試的類,實現測試中需要的方法; 應用場合: 對象所依賴的對象還未實現; 對象所依賴的對象過于復雜;
2.7 Mock使用場合
控制點: 被測對象依賴的某個類和方法需要實現;
檢查點: 生成的結果依賴的某個類和方法需要實現;
3.可測試性設計:
依賴注入(Dependency Inject):將內部依賴改為外部傳入(參數注入、構造注入、設置函數注入),設置缺省值;
依賴查找(Dependency Look): 在不改動原代碼的情況實現注入, 使用factory模式,使用服務定位器(service locator),使用Factory生成測試替身;
Humble Object:在被測對象之上再封裝一層,將所有被測對象的依賴全部放入封裝對象里,即Humble Object,
測試鉤子(test hood) :在被測對象中寫一段利于測試的代碼,如條件判斷是否走生產代碼還是測試代碼;
4.如何讓代碼可測試:
感知: 感知某些方法調用產生的效果和影響,主要工具:fake object 和 mock object;
分離: 將應用其它部分分離并單獨運行,解依賴技術(代碼重構):參數適配、提取并重寫工廠方法、封裝全局應用、接口提取、實現提取;
5.數據庫單元測試:
數據庫存取測試:僅針對存和取進行測試,用Fake Object模擬數據庫;
6.組織和管理單元測試:
6.1 幾種可行的單元測試管理方式:
一個生產類一個測試類;
一個功能一個測試類;
一個fixture一個測試類;
6.2 測試類命名方式:
test+方法名+期望值
6.3 測試執行分組:
使用Test Suite: 分組: 基于功能分組、基于類型分組;
使用Annotation分組(junit4或testng);
6.4 測試文件組織:
測試代碼和生產代碼放在一起;
使用測試包;
測試依賴的數據文件:使用相對路徑;
7.單元測試質量:
7.1 度量緯度:
對業務的代碼行覆蓋率;
測試執行的穩定性;
測試運行速度(不超過30秒);
7.2 帶來的產品質量提升:
縮短產品發布周期;
和系統測試階段對比發現缺陷的數量;
04 接口測試
1.API測試
1.1 方法分類:
黑盒測試方法: 驗證每個API的功能正確性;
白盒測試方法: 考慮各個API之間的關聯性;
場景測試: 場景是應用運行的剖面; API組合方式的測試;
1.2 API接口的解依賴
stub、mock、fake
2.Http接口的web測試
使用WebDriver的htmlDriver、htmlUnit;
3.基礎項目(支撐其它應用,不直接面向用戶)的接口測試
建立接口級別的測試集;
設立可被其它應用訪問的最新版本的測試環境;
建立測試環境的持續集成環境;
4.持續集成與構建
對測試進行持續集成和持續構建,監控應用的變化,確定測試范圍;
完成系統測試和集成測試后,才進行持續集成。
原文轉自:http://www.wangyuxiong.com/archives/52292