在測(cè)試中,經(jīng)常涉及到對(duì)依賴代碼的處理,這將涉及到系統(tǒng)的結(jié)構(gòu)的設(shè)計(jì)。一個(gè)好的設(shè)計(jì),必然是容易測(cè)試的。代碼之間的依賴被極大的隔離開來,很容易的進(jìn)行測(cè)試。如何對(duì)對(duì)其他層具有依賴的代碼代碼進(jìn)行測(cè)試呢?可以有兩種方法:引入stub和引入mock。那么這兩者之間的區(qū)別是什么呢?
在理解其區(qū)別之前,需要明白一點(diǎn),他們都是為了同一個(gè)目標(biāo)而出現(xiàn)的,代替依賴部分,讓原先的“整合測(cè)試”簡(jiǎn)化為“單元測(cè)試”。
mock:使用easymock等包,在程序代碼中向被測(cè)試代碼注入“依賴部分”,通過代碼可編程的方式模擬出函數(shù)調(diào)用返回的結(jié)果。
stub:自己寫代碼代替“依賴部分”。它本身就是“依賴部分”的一個(gè)簡(jiǎn)化實(shí)現(xiàn)。
實(shí)際上,在能夠使用mock的時(shí)候,就不應(yīng)該選擇使用stub。但是有時(shí)候是必須使用stub的,例如在對(duì)遺留代碼進(jìn)行測(cè)試時(shí),該部分代碼不支持“注入”,那么只能將“替代”這個(gè)過程外移,使用stub完成此任務(wù)了。