首先寫unit test之前,要確認(rèn)自己的測(cè)試遵循兩個(gè)原則:
1、盡量不要干涉原來的代碼。從閱讀代碼的體驗(yàn)來說,不要讓你的測(cè)試(哪怕是一小段if..else...的代碼)出現(xiàn)在你準(zhǔn)備測(cè)試的代碼中。
2、代碼要只是測(cè)試某個(gè)class里面的一個(gè)特定的function。這個(gè)function不能太簡(jiǎn)單,太簡(jiǎn)單就沒有測(cè)試的意義;也不能太復(fù)雜,不應(yīng)該牽涉太多其他的class,如果太復(fù)雜就不應(yīng)該寫unit test,而考慮其他的測(cè)試方法。
(以上兩個(gè)原則其實(shí)大家都知道,但是寫的時(shí)候很多人都沒有嚴(yán)格遵守,所以這里強(qiáng)調(diào)一下)
這里把單元測(cè)試分為了5個(gè)級(jí)別:
Level1:正常流程可用,即一個(gè)函數(shù)在輸入正確的參數(shù)時(shí),會(huì)有正確的輸出。
Level2:異常流程可拋出邏輯異常,即輸入?yún)?shù)有誤時(shí),不能拋出系統(tǒng)異常,而是用自己定義的邏輯異常通知上層調(diào)用代碼其錯(cuò)誤之處。?
Level3:極端情況和邊界數(shù)據(jù)可用,對(duì)輸入?yún)?shù)的邊界情況也要單獨(dú)測(cè)試,確保輸出是正確有效的。
Level4:所有分支、循環(huán)的邏輯走通,不能有任何流程是測(cè)試不到的。
Level5:輸出數(shù)據(jù)的所有字段驗(yàn)證,對(duì)有復(fù)雜數(shù)據(jù)結(jié)構(gòu)的輸出,確保每個(gè)字段都是正確的。
在做項(xiàng)目中,一般只做到Level2,重要系統(tǒng)或者底層服務(wù),要做到Level3或Level4。而很少做到Level5。即便如此,就已經(jīng)實(shí)現(xiàn)了很難被黑盒測(cè)試工程師發(fā)現(xiàn)bug。
除了級(jí)別外,測(cè)試方法也要區(qū)分不同系統(tǒng)的玩法。比如基于WEB的系統(tǒng),就需要確保單元測(cè)試?yán)锟梢阅M發(fā)送請(qǐng)求,這個(gè)一般是WEB框架提供支持的。比如常用的web.py、Flask、Django都有支持。不僅僅可以模擬簡(jiǎn)單的請(qǐng)求,還可以模擬POST、cookie等。另外一般建議單獨(dú)寫個(gè)函數(shù)來模擬登錄過程,這樣系統(tǒng)登錄后行為的測(cè)試就不必反復(fù)模擬登錄了。
單元測(cè)試一大痛苦是構(gòu)造測(cè)試數(shù)據(jù)。我的看法是測(cè)試數(shù)據(jù)應(yīng)該是人造的,而不是隨便從產(chǎn)品環(huán)境dump出來一份。只有人造的數(shù)據(jù)能確保環(huán)境可控,每次運(yùn)行不會(huì)因?yàn)榄h(huán)境改變而頻繁修改testcase。常用玩法是測(cè)試數(shù)據(jù)分為基礎(chǔ)數(shù)據(jù)和附加數(shù)據(jù)兩部分?;A(chǔ)數(shù)據(jù)是所有testcase共享的,比如建立幾個(gè)常用角色的用戶等等。附加數(shù)據(jù)是testcase內(nèi)部自己建立的。這樣每次testcase運(yùn)行時(shí),先清空數(shù)據(jù)庫,導(dǎo)入基礎(chǔ)數(shù)據(jù),導(dǎo)入附加數(shù)據(jù),然后執(zhí)行測(cè)試,驗(yàn)證結(jié)果。
各類程序的函數(shù)可以分為純函數(shù)和副作用函數(shù)。純函數(shù)對(duì)應(yīng)的是數(shù)學(xué)里函數(shù)的概念,輸出和輸入是一一對(duì)應(yīng)的。對(duì)一個(gè)輸入有確定的輸出。比如1+1=2。而副作用函數(shù)則相反,同樣的輸入,在不同時(shí)間和環(huán)境里,可能有不同的輸出。比如任何涉及IO、網(wǎng)絡(luò)、數(shù)據(jù)庫的。副作用函數(shù)的測(cè)試比純函數(shù)麻煩的多,因?yàn)槟惚仨氁暾臉?gòu)造其所依賴的所有環(huán)境,才能夠復(fù)現(xiàn)一個(gè)副作用函數(shù)的行為。也正因?yàn)槿绱?,副作用函?shù)出bug的概率比純函數(shù)高的多。理解這個(gè)概念以后,應(yīng)該盡可能的把程序里的純函數(shù)和副作用函數(shù)進(jìn)行拆解,降低副作用函數(shù)的比例和邏輯復(fù)雜度。還有,副作用函數(shù)是會(huì)傳染的,一個(gè)函數(shù)如果調(diào)用了副作用函數(shù),那么它也會(huì)變成副作用函數(shù)。文章來源:http://www.zghlxwxcb.cn/news/detail-631472.html
【整整200集】超超超詳細(xì)的Python接口自動(dòng)化測(cè)試進(jìn)階教程,真實(shí)模擬企業(yè)項(xiàng)目實(shí)戰(zhàn)!!文章來源地址http://www.zghlxwxcb.cn/news/detail-631472.html
到了這里,關(guān)于如何快速做單元測(cè)試?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!