go mock模擬接口的實(shí)現(xiàn)
簡(jiǎn)介
mock翻譯過來是‘模擬’的意思,也就是模擬接口返回的信息,用已有的信息替換接口返回的信息,從而提供仿真環(huán)境,實(shí)現(xiàn)模擬數(shù)據(jù)下的功能測(cè)試;
在多人合作編碼時(shí),你寫的一個(gè)函數(shù)func DoSth(People)用到了別人寫的People接口。此時(shí)你的函數(shù)已經(jīng)寫好了,但是實(shí)現(xiàn)People接口的程序員還在磨蹭,而這時(shí)你想要測(cè)試func DoSth()是否正確運(yùn)行,就需要gomock接口模擬技術(shù)。
導(dǎo)包
安裝gomock包以及mockgen(mock代碼生成器)
go get -u github.com/golang/mock/gomock go install github.com/golang/mock/mockgen
使用步驟
1.構(gòu)造代碼
type People interface { ?? ?GetName() string ?? ?GetAge() int } func GetPeopleInfo(people People) { ?? ?//調(diào)用接口 ?? ?println("name:", people.GetName(), "age:", people.GetAge()) }
示例構(gòu)造了一個(gè)函數(shù)GetPeopleInfo(People),調(diào)用了People接口。
2.使用mockgen生成mock代碼
mockgen主要有兩種使用方式:
1.通過source構(gòu)建:從源文件生成 mock 接口(通過 -source 啟用)
mockgen -source=foo.go [other options]
2.通過reflect構(gòu)建:通過使用反射程序來生成 mock 接口。它通過傳遞兩個(gè)非標(biāo)志參數(shù)來啟用:導(dǎo)入路徑和逗號(hào)分隔的接口列表
mockgen database/sql/driver Conn,Driver
具體參數(shù)可以在命令行輸入mockgen進(jìn)行查看。
本文中使用2進(jìn)行mock代碼的構(gòu)建
代碼結(jié)構(gòu):
Test ├── gomock2 └── db.go
使用的mockgen命令:
mockgen -destination db_mock.go -package gomock2 Test/gomock2 People
-destination db_mock.go:表明生成的mock代碼存放在db_mock.go
-package gomock2:生成代碼所屬包名為gomock2
Test/gomock2 People :對(duì)Test/gomock2下的People接口進(jìn)行模擬
成功后會(huì)生成db_mock.go文件。
3.建立測(cè)試用例
func TestGetFromDB(t *testing.T) { ??? ?//創(chuàng)建mock控制器,控制器 ?? ?controller := gomock.NewController(t) ?? ?defer controller.Finish()//觸發(fā)最后的斷言 ?? ?mockPeople := NewMockPeople(controller) ?? ?mockPeople.EXPECT().GetName().Return("yi") ?? ?mockPeople.EXPECT().GetAge().Return(18).Times(1) //預(yù)計(jì)返回18并被調(diào)用1次 ?? ?//調(diào)用測(cè)試方法? ?? ?GetPeopleInfo(mockPeople) }
主要有下面幾個(gè)步驟:
1.創(chuàng)建mock控制器,控制器定義了mock對(duì)象的作用域、生命周期、期待值。
2. defer controller.Finish():觸發(fā)斷言,判斷結(jié)果是否符合預(yù)期。
3. 創(chuàng)建Mock對(duì)象:Mock對(duì)象實(shí)現(xiàn)了要模擬的接口。
4. 設(shè)計(jì)預(yù)期值,接口的輸入、返回。
5. 調(diào)用測(cè)試方法。
go:generate生成mock代碼
在interface所對(duì)應(yīng)的go文件中加入注釋:
//go:generate mockgen -destination db_mock.go -package gomock2 Test/gomock2 People
隨后在命令行的當(dāng)前目錄下執(zhí)行下面語句就能自動(dòng)生成mock代碼
go generate
或者在項(xiàng)目根目錄輸入,執(zhí)行當(dāng)前項(xiàng)目中所有g(shù)o:generate注釋表示的內(nèi)容。
go generate ./...
到此這篇關(guān)于go mock模擬接口的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)go mock模擬接口內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一文帶你了解Go語言fmt標(biāo)準(zhǔn)庫(kù)輸入函數(shù)的使用
這篇文章主要為大家詳細(xì)介紹了Go語言中?fmt?標(biāo)準(zhǔn)庫(kù)輸入函數(shù)的使用,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2023-01-01go日志系統(tǒng)logrus顯示文件和行號(hào)的操作
這篇文章主要介紹了go日志系統(tǒng)logrus顯示文件和行號(hào)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-11-11GO使用socket和channel實(shí)現(xiàn)簡(jiǎn)單控制臺(tái)聊天室
今天小編給大家分享一個(gè)簡(jiǎn)單的聊天室功能,聊天室主要功能是用戶可以加入離開聊天室,實(shí)現(xiàn)思路也很簡(jiǎn)單明了,下面小編給大家?guī)砹送暾a,感興趣的朋友跟隨小編一起看看吧2021-12-12一文帶大家了解Go語言中的內(nèi)聯(lián)優(yōu)化
內(nèi)聯(lián)優(yōu)化是一種常見的編譯器優(yōu)化策略,通俗來講,就是把函數(shù)在它被調(diào)用的地方展開,這樣可以減少函數(shù)調(diào)用所帶來的開銷,本文主要為大家介紹了Go中內(nèi)聯(lián)優(yōu)化的具體使用,需要的可以參考下2023-05-05