如果你想構(gòu)建可靠的高質(zhì)量的軟件,自動化測試將是你工具箱里面非常關(guān)鍵的一個部分,它幫助你減少手工測試的代價,提高你的開發(fā)小組重構(gòu)已有代碼的能力。
自動化測試的類型
并非所有的自動化測試都是相似的,他們通常在作用域、實現(xiàn)方式和執(zhí)行時間上有所差異,我把他們分成三種類型的測試:單元測試、集成測試和功能測試。
- 單元測試用于測試你代碼的最小單元,在基于java的項目中這個單元就是一個方法(method),在單元測試中你會避免與其他類或者外部的系統(tǒng)打交道。單元測試很容易編寫,執(zhí)行起來非??焖?,能夠在開發(fā)階段給你代碼的正確性提供反饋。
- 集成測試用于測試某一個組件或者子系統(tǒng)。你想確保不同類之間的交互能夠按照預(yù)期一樣,一個典型的情況就是邏輯層需要和數(shù)據(jù)庫打交道。因此相關(guān)的子系統(tǒng)、資源文件和服務(wù)層必須在測試執(zhí)行階段是可訪問的。集成測試通常比單元測試運行更慢,更難維護,出現(xiàn)錯誤時也比較難診斷。
- 功能測試用于測試一個應(yīng)用的功能,包括和外部系統(tǒng)的交互。功能測試是最難實現(xiàn)也是運行最慢的,因為他們需要模仿用戶交互的過程,在web開發(fā)的情況,功能測試應(yīng)該包括用戶點擊鏈接、輸入數(shù)據(jù)或者在瀏覽窗口提交表單這些情形,因為用戶接口可能隨著時間改變,功能測試的維護將會很困難。
自動化測試金字塔
你可能想知道到底哪一種測試最適合你的項目,在現(xiàn)實環(huán)境中你可能會混合使用這幾種測試方法來確保你的代碼在不同架構(gòu)層面都是正確的。你需要寫多少測試取決于編寫和維護測試的時間消耗。測試越簡單就越容易執(zhí)行,一般來講你的項目應(yīng)該包含很多單元測試,少量的集成測試以及更少的功能測試。