在瀏覽了很多大佬的文章以及接受過數(shù)次線上事故的洗禮之后,我深刻意識到了將代碼放到線上跑之前進行詳盡地測試的重要性,之前一直對單元測試沒有上心,主要精力都放在了設(shè)計和開發(fā)上,后來leader跟我說在進行開發(fā)工作的時候大部分情況只有百分之40的時間用來開發(fā),而測試調(diào)試可能會用百分之六十的時間和精力,然后閱讀了一些資料后,學(xué)習(xí)了一下在做golang開發(fā)的時候怎么對自己的代碼進行單元測試。
在平時寫一些demo的時候測試很簡單,只需要寫一個main方法調(diào)用下寫的函數(shù)就可以驗證功能了。在golang的項目開發(fā)中寫單元測試其實差不多也是這樣,一般來說golang中單元測試代碼可以就和代碼文件放在一個包下,取名代碼“文件名_test.go”。然后對要測試的方法編寫測試用例即可。
一些普通的算法代碼單元測試可能很簡單,就是傳個各種參數(shù)然后校驗一下返回的結(jié)果就可以了。比如下面的例子


但是大部分情況我們寫的代碼可能不只是一個單純的算法,可能會依賴各種數(shù)據(jù)源和接口,比如調(diào)用http接口或是查數(shù)據(jù)庫,這個時候就不是簡單地進行方法調(diào)用和傳參就可以順利跑通測試用例的了。比如

這個時候如果http接口還未提供或者說在測試環(huán)境沒辦法進行調(diào)用,就不能通過上面那種簡單的方法調(diào)用的形式進行單元測試了。這個時候就需要用到mock數(shù)據(jù),簡單來說就是將獲取數(shù)據(jù)源的方法抽象為一個接口,

然后原待測試的方法重構(gòu)一下

然后就可以在真實環(huán)境調(diào)用該方法時傳入實現(xiàn)中調(diào)用真實http接口的ds,在測試時可以直接mock假的接口數(shù)據(jù)以驗證方法的其他邏輯。
