作者介紹:熊訓(xùn)德(英文名:Sundy),16年畢業(yè)于四川大學(xué)大學(xué)并加入騰訊。目前在騰訊云從事hadoop生態(tài)相關(guān)的云存儲和計算等后臺開發(fā),喜歡并專注于研究大數(shù)據(jù)、虛擬化和人工智能等相關(guān)技術(shù)。

本文檔說明go語言自帶的測試框架未提供或者未方便地提供的測試方案,主要是用于解決寫單元測試中比較頭痛的依賴問題。也就是偽造模式,經(jīng)典的偽造模式有樁對象(stub),模擬對象(mock)和偽對象(fake)。比較幸運(yùn)的是,社區(qū)有豐富的第三方測試框架支持支持。下面就對筆者親身試用并實踐到項目中的幾個框架做介紹:

1.gomock

https://godoc.org/github.com/golang/mock/gomock

gomock模擬對象的方式是讓用戶聲明一個接口,然后使用gomock提供的mockgen工具生成mock對象代碼。要模擬(mock)被測試代碼的依賴對象時候,即可使用mock出來的對象來模擬和記錄依賴對象的各種行為:比如最常用的返回值,調(diào)用次數(shù)等等。文字?jǐn)⑹鲇悬c(diǎn)抽象,直接上代碼:

dick.go中DickFunc依賴外部對象OutterObj,本示例就是說明如何使用gomock框架控制所依賴的對象。

func DickFunc( outterObj MockInterface,para int)(result int){
    fmt.Println("This init DickFunc")
    fmt.Println("call outter.func:")    return outterObj.OutterFunc(para)
}

mockgen工具命令是:

mockgen -source {source_file}.go -destination {dest_file}.go

比如,本示例即是:

mockgen -source src_mo