亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

go mock模擬接口的實(shí)現(xiàn)

 更新時(shí)間:2023年06月21日 08:59:45   作者:Sahm5k  
本文主要介紹了go mock模擬接口的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

簡(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ù)的使用

    一文帶你了解Go語言fmt標(biāo)準(zhǔn)庫(kù)輸入函數(shù)的使用

    這篇文章主要為大家詳細(xì)介紹了Go語言中?fmt?標(biāo)準(zhǔn)庫(kù)輸入函數(shù)的使用,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下
    2023-01-01
  • 詳解如何利用Golang泛型提高編碼效率

    詳解如何利用Golang泛型提高編碼效率

    Golang的泛型已經(jīng)出來有一段時(shí)間了,大家應(yīng)該或多或少對(duì)它有所了解。雖然Golang的泛型在功能上確實(shí)比較簡(jiǎn)單,而且確實(shí)可能會(huì)增加代碼的復(fù)雜度,過度使用可能還會(huì)降低代碼可讀性。本文就來介紹一下Golang泛型的相關(guān)知識(shí)吧
    2023-04-04
  • Go語言如何實(shí)現(xiàn)TCP通信詳解

    Go語言如何實(shí)現(xiàn)TCP通信詳解

    go里面實(shí)現(xiàn)tcp沒有像之前寫的C++那些那么麻煩,在C++里面要先創(chuàng)建套接字,然后綁定ip地址,go里面直接就一個(gè)函數(shù)建立套接字,然后在進(jìn)行通信就可以了,下面這篇文章主要給大家介紹了關(guān)于Go語言如何實(shí)現(xiàn)TCP通信的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • go日志系統(tǒng)logrus顯示文件和行號(hào)的操作

    go日志系統(tǒng)logrus顯示文件和行號(hào)的操作

    這篇文章主要介紹了go日志系統(tǒng)logrus顯示文件和行號(hào)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • Golang 刪除文件并遞歸刪除空目錄的操作

    Golang 刪除文件并遞歸刪除空目錄的操作

    這篇文章主要介紹了Golang 刪除文件并遞歸刪除空目錄的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • Go語言中JSON文件的讀寫操作

    Go語言中JSON文件的讀寫操作

    本文主要介紹了Go語言JSON文件的讀寫操作,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 深入解析Go template模板使用詳解

    深入解析Go template模板使用詳解

    這篇文章主要介紹了深入解析Go template模板使用詳解,需要的朋友可以參考下
    2022-04-04
  • Golang學(xué)習(xí)之map的用法詳解

    Golang學(xué)習(xí)之map的用法詳解

    在Golang(又稱Go語言)中,map是一種非常有用的數(shù)據(jù)結(jié)構(gòu),所以這篇文章小編就來帶大家一起深入了解一下map的用法,感興趣的小伙伴可以了解一下
    2023-06-06
  • GO使用socket和channel實(shí)現(xiàn)簡(jiǎn)單控制臺(tái)聊天室

    GO使用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)化

    一文帶大家了解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

最新評(píng)論