記錄點(diǎn)滴經(jīng)驗(yàn),匯聚知識(shí)汪洋
1、單元測(cè)試時(shí)對(duì)測(cè)試目標(biāo)的明確。
最近對(duì)單元測(cè)試時(shí)明確測(cè)試目標(biāo)有了新的想法,就是在對(duì)目標(biāo)類進(jìn)行測(cè)試時(shí)一定要明確目標(biāo)類的作用究竟是什么。
比如說(shuō)對(duì)于一個(gè)5層結(jié)構(gòu)的系統(tǒng)來(lái)說(shuō):數(shù)據(jù)庫(kù),DAO,BL,control,JSP
其中數(shù)據(jù)庫(kù)和JSP的單元測(cè)試代價(jià)是比較高的,所以不考慮測(cè)試。
DAO的目標(biāo)是從數(shù)據(jù)庫(kù)獲取數(shù)據(jù),所以可以使用內(nèi)存數(shù)據(jù)庫(kù)或者真實(shí)數(shù)據(jù)庫(kù)等方法直接進(jìn)行測(cè)試,這點(diǎn)通常沒有爭(zhēng)議
BL層的目標(biāo)是對(duì)業(yè)務(wù)邏輯的封裝,這個(gè)層的測(cè)試通常是比較有爭(zhēng)議的,要明確它僅僅是調(diào)用DAO并進(jìn)行業(yè)務(wù)封裝,所以只需要對(duì)它以來(lái)的DAO進(jìn)行模擬,然后測(cè)試是否正確封裝就可以了。
control層的目標(biāo)是根據(jù)請(qǐng)求進(jìn)行跳轉(zhuǎn),所以這個(gè)層的測(cè)試方法是,模擬請(qǐng)求對(duì)象和BL,然后檢查是否正確的調(diào)用BL以及正確的跳轉(zhuǎn)。
2、當(dāng)不好倒轉(zhuǎn)依賴時(shí)進(jìn)行依賴模擬的小技巧。
情景環(huán)境:我的BL層在對(duì)DAO層的依賴關(guān)系上沒有使用比較靈活的依賴反轉(zhuǎn)方法(這個(gè)是歷史原因^_^),這時(shí)候就對(duì)我在測(cè)試時(shí)對(duì)DAO的模擬上造成了一定的困擾。
解決辦法:但是所謂辦法總是能像出來(lái)的嗎,我把BL調(diào)用到DAO的地方封裝成一個(gè)統(tǒng)一的方法,然后在BL中定義一個(gè)Map,這個(gè)Map是可以從外部進(jìn)行set的,然后在統(tǒng)一調(diào)用DAO的方法中判斷,如過(guò)map中有設(shè)置就獲取map的,如果map中沒有就獲取原來(lái)緊密耦合的DAO,這樣就可以在測(cè)試的時(shí)候從外部注入模擬的DAO了。