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