元測(cè)試進(jìn)階篇
作者介紹:熊訓(xùn)德(英文名:Sundy),16年畢業(yè)于四川大學(xué)大學(xué)并加入騰訊。目前在騰訊云從事hadoop生態(tài)相關(guān)的云存儲(chǔ)和計(jì)算等后臺(tái)開(kāi)發(fā),喜歡并專(zhuān)注于研究大數(shù)據(jù)、虛擬化和人工智能等相關(guān)技術(shù)。
本文檔說(shuō)明go語(yǔ)言自帶的測(cè)試框架未提供或者未方便地提供的測(cè)試方案,主要是用于解決寫(xiě)單元測(cè)試中比較頭痛的依賴(lài)問(wèn)題。也就是偽造模式,經(jīng)典的偽造模式有樁對(duì)象(stub),模擬對(duì)象(mock)和偽對(duì)象(fake)。比較幸運(yùn)的是,社區(qū)有豐富的第三方測(cè)試框架支持支持。下面就對(duì)筆者親身試用并實(shí)踐到項(xiàng)目中的幾個(gè)框架做介紹:
1.gomock
https://godoc.org/github.com/golang/mock/gomock
gomock模擬對(duì)象的方式是讓用戶(hù)聲明一個(gè)接口,然后使用gomock提供的mockgen工具生成mock對(duì)象代碼。要模擬(mock)被測(cè)試代碼的依賴(lài)對(duì)象時(shí)候,即可使用mock出來(lái)的對(duì)象來(lái)模擬和記錄依賴(lài)對(duì)象的各種行為:比如最常用的返回值,調(diào)用次數(shù)等等。文字?jǐn)⑹鲇悬c(diǎn)抽象,直接上代碼:
dick.go中DickFunc依賴(lài)外部對(duì)象OutterObj,本示例就是說(shuō)明如何使用gomock框架控制所依賴(lài)的對(duì)象。
func DickFunc( outterObj MockInterface,para int)(result int){ fmt.Println("This init DickFunc") fmt.Println("call outter.func:") return outterObj.OutterFu