消滅低級(jí)錯(cuò)誤
基本的單元測(cè)試,可以在系統(tǒng)測(cè)試之前,把大部分比較低級(jí)的錯(cuò)誤都消滅掉,減少系統(tǒng)測(cè)試過(guò)程中的問(wèn)題,這樣也就減少了系統(tǒng)測(cè)試中定位和解決問(wèn)題的時(shí)間成本了。
找出潛在的bug
某些類(lèi)型的bug,靠系統(tǒng)測(cè)試是很難找到的。例如一些代碼分支,平時(shí)99%的場(chǎng)景基本上都走不到,但一旦走到了,如果沒(méi)有提前測(cè)試好,那么可能就是一個(gè)災(zāi)難。
上庫(kù)前的保證
加了新代碼,上庫(kù)前跑一把單元測(cè)試,都通過(guò),說(shuō)明代碼可能沒(méi)有影響到之前的邏輯,這樣上庫(kù)也比較放心。如果之前的單元測(cè)試跑不過(guò),那么很有可能新的代碼有潛在的問(wèn)題,趕緊修復(fù)去吧。
重構(gòu)代碼的機(jī)會(huì)
寫(xiě)單元測(cè)試的過(guò)程中,你可能會(huì)順手把一些code重構(gòu)了,為什么?舉例,一些長(zhǎng)得非常像的代碼,如果每次都要寫(xiě)一堆測(cè)試代碼去測(cè)同樣的code,你會(huì)不會(huì)抓狂?不測(cè)吧,覆蓋率又上不去,于是我就會(huì)想方設(shè)法把待測(cè)試的code改得盡量的精簡(jiǎn),重復(fù)代碼減少,這樣覆蓋率上去了,測(cè)試也好測(cè)了,代碼也簡(jiǎn)潔了。如果沒(méi)有單元測(cè)試和覆蓋率的要求的話,坦白說(shuō)可能一來(lái)自己不會(huì)發(fā)現(xiàn)這些重復(fù)的code,另一方面即使發(fā)現(xiàn)了,可能也沒(méi)有太大的動(dòng)力去改進(jìn)。
另外,由于單元測(cè)試中,你需要嘗試去覆蓋一些異常分支,這是系統(tǒng)測(cè)試常常走不到的地方,于是就會(huì)引起你的一些思考,例如這個(gè)異常分支是否真的需要?是否真的會(huì)發(fā)生?對(duì)于一些實(shí)際上絕對(duì)不會(huì)出錯(cuò)的函數(shù),那么我覺(jué)得可能異常分支是沒(méi)必要存在的。
重新review代碼的機(jī)會(huì)
寫(xiě)UT的過(guò)程中,我總是會(huì)好好看哪些代碼執(zhí)行到了,哪些代碼沒(méi)有執(zhí)行到,這其實(shí)也是一個(gè)review自己代碼的機(jī)會(huì),有些時(shí)候,并不是UT本身幫我找到bug,而是回頭review自己代碼的時(shí)候發(fā)現(xiàn)的。