為什么寫本文
當(dāng)團隊有要求寫Unit Test時,你是不是想堅持團隊的這種要求,但是內(nèi)心中會有一下幾種想法呢疑俭?
1,我該怎么開始Unit Test ?
2婿失,我寫代碼似乎沒有什么該測試的?
3怠硼,感覺寫Unit Test會花費我部分時間?
4,參考別人的Unit Test Code移怯,并不清楚為人為什么寫那么多Unit Test香璃,到底該測試什么?
...
如果你被這些問題困擾舟误,可以看看本文葡秒,或許能給一些答案。
概要
0, 哪些場景需要Unit Test
1,為API接口添加測試
2眯牧,業(yè)務(wù)代碼如何測試
3蹋岩,Exception的測試
4,斷言的風(fēng)格
0学少,哪些場景需要Unit Test
時間和質(zhì)量總是被開發(fā)人員剪个、開發(fā)人員周圍的角色所提及,你或許知道“測試金字塔”版确,但是這里并不是講測試金字塔中的策略扣囊,而是實際工作中如何權(quán)衡寫UnitTest的時間和質(zhì)量。
衡量時間和質(zhì)量绒疗,可以通過一個很好的緯度的權(quán)衡:價值侵歇。
圍繞價值,我們沒有必要處處寫測試這么極端吓蘑,也不用完全覺得寫Unit Test花費了太多時間惕虑。
在產(chǎn)出價值最大的地方花時間加上Unit Test,投入產(chǎn)出比才會最大化(即:價值最大化)磨镶。
以Java Web后端開發(fā)為例溃蔫,以下幾部分是非常值得我們關(guān)注的。
1琳猫,API是否符合預(yù)期
2伟叛,業(yè)務(wù)實現(xiàn)是否符合預(yù)期
3,程序中Exception是否已經(jīng)捕獲處理
1沸移,為API添加測試
為什么為API添加測試痪伦?
1,API是Web服務(wù)與外界直接溝通的地方雹锣,確保API能夠接收預(yù)期的參數(shù)并返回預(yù)期的結(jié)果网沾,保證API的正確性。
2蕊爵,為API添加UnitTest能夠降低調(diào)用API是出現(xiàn)異常情況的溝通成本辉哥。
應(yīng)該為API添加哪些測試?
1攒射,驗證參數(shù)
2醋旦,驗證返回結(jié)果
如何寫API的測試?API測試示例
2会放,業(yè)務(wù)代碼的測試
為什么為業(yè)務(wù)代碼添加測試?
1饲齐,證明自己的業(yè)務(wù)邏輯是對的,相比程序的整個上下文都運行起來后實際測試才發(fā)現(xiàn)問題咧最,發(fā)現(xiàn)/修改的成本更低捂人。
2御雕,修改代碼是,原來寫的業(yè)務(wù)Unit Test成了約束滥搭,修復(fù)Unit Test的過程酸纲,是我們確認自己程序修改正確的過程。
為業(yè)務(wù)代碼添加哪些測試瑟匆?
1闽坡,當(dāng)調(diào)用某段業(yè)務(wù)代碼后,有沒有返回預(yù)期的的想要的結(jié)果
2愁溜,當(dāng)業(yè)務(wù)代碼傳入一些非法數(shù)據(jù)是疾嗅,業(yè)務(wù)代碼是否返回了期望的結(jié)果
如何對service進行的單元測試?業(yè)務(wù)邏輯的測試示例
3祝谚,Exception的測試
為什么添加Exception的測試宪迟?
1酣衷,關(guān)注Exception能夠讓我們寫的代碼更加健壯交惯,確保業(yè)務(wù)代中的Exception早在掌握之中囱淋。
2烟勋,關(guān)注Exception讓我們多重視角看待需求,不僅僅正常的情況下程序正常運行蹦玫,也應(yīng)該保證異常情況是程序是否能夠正常運行啊片,返回預(yù)期的結(jié)果只锻。
為Exception添加哪些測試
1,當(dāng)某些異常情況下紫谷,是否拋出期望的異常齐饮;
2,當(dāng)拋出異常時笤昨,是否期望的代碼執(zhí)行時拋出的異常祖驱。
如何對Exception進行測試?Exception測試示例