最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

簡介

mock翻譯過來是‘模擬’的意思,也就是模擬接口返回的信息,用已有的信息替換接口返回的信息,從而提供仿真環(huán)境,實現(xiàn)模擬數(shù)據(jù)下的功能測試;

在多人合作編碼時,你寫的一個函數(shù)func DoSth(People)用到了別人寫的People接口。此時你的函數(shù)已經(jīng)寫好了,但是實現(xiàn)People接口的程序員還在磨蹭,而這時你想要測試func DoSth()是否正確運行,就需要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)造了一個函數(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 接口。它通過傳遞兩個非標(biāo)志參數(shù)來啟用:導(dǎ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 :對Test/gomock2下的People接口進(jìn)行模擬

成功后會生成db_mock.go文件。

3.建立測試用例

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ù)計返回18并被調(diào)用1次
?? ?//調(diào)用測試方法?
?? ?GetPeopleInfo(mockPeople)
}

主要有下面幾個步驟:
1.創(chuàng)建mock控制器,控制器定義了mock對象的作用域、生命周期、期待值。
2. defer controller.Finish():觸發(fā)斷言,判斷結(jié)果是否符合預(yù)期。
3. 創(chuàng)建Mock對象:Mock對象實現(xiàn)了要模擬的接口。
4. 設(shè)計預(yù)期值,接口的輸入、返回。
5. 調(diào)用測試方法。

go:generate生成mock代碼

在interface所對應(yīng)的go文件中加入注釋:

//go:generate mockgen  -destination db_mock.go -package gomock2 Test/gomock2 People

隨后在命令行的當(dāng)前目錄下執(zhí)行下面語句就能自動生成mock代碼

go generate

或者在項目根目錄輸入,執(zhí)行當(dāng)前項目中所有g(shù)o:generate注釋表示的內(nèi)容。

go generate ./...

到此這篇關(guān)于go mock模擬接口的實現(xiàn)的文章就介紹到這了,更多相關(guān)go mock模擬接口內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • go語言map與string的相互轉(zhuǎn)換的實現(xiàn)

    go語言map與string的相互轉(zhuǎn)換的實現(xiàn)

    這篇文章主要介紹了go語言map與string的相互轉(zhuǎn)換的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 一文帶你了解Go語言中的匿名函數(shù)

    一文帶你了解Go語言中的匿名函數(shù)

    無論是在Go語言還是其他編程語言中,匿名函數(shù)都扮演著重要的角色,本文將詳細(xì)介紹Go語言中匿名函數(shù)的概念和使用方法,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-06-06
  • Go語言應(yīng)該什么情況使用指針

    Go語言應(yīng)該什么情況使用指針

    go語言的指針類型和C/C++的指針類型用法是一樣的,那么Go語言應(yīng)該什么情況使用指針,本文就詳細(xì)的介紹一下,感興趣的可以了解一下
    2021-07-07
  • GoLang中的iface?和?eface?的區(qū)別解析

    GoLang中的iface?和?eface?的區(qū)別解析

    iface 和 eface 都是 Go 中描述接口的底層結(jié)構(gòu)體,區(qū)別在于 iface 描述的接口包含方法,而 eface 則是不包含任何方法的空接口:interface{},這篇文章主要介紹了GoLang之iface?和?eface?的區(qū)別,需要的朋友可以參考下
    2022-09-09
  • Go語言中常用json處理操作小結(jié)

    Go語言中常用json處理操作小結(jié)

    在?Go?中,你可以使用內(nèi)置的?encoding/json?包來處理?JSON?格式數(shù)據(jù),本文整理了一些常見的?JSON?處理操作,希望對大家有所幫助
    2024-04-04
  • Go語言編譯原理之源碼調(diào)試

    Go語言編譯原理之源碼調(diào)試

    這篇文章主要為大家介紹了Go語言編譯原理之源碼調(diào)試示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 深入理解go?reflect反射慢的原因

    深入理解go?reflect反射慢的原因

    我們選擇?go?語言的一個重要原因是,它有非常高的性能。但是它反射的性能卻一直為人所詬病,本篇文章就來看看?go?反射的性能問題,感興趣的可以了解一下
    2023-01-01
  • golang基礎(chǔ)之Interface接口的使用

    golang基礎(chǔ)之Interface接口的使用

    這篇文章主要介紹了golang基礎(chǔ)之Interface接口的使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • Golang開發(fā)命令行之flag包的使用方法

    Golang開發(fā)命令行之flag包的使用方法

    這篇文章主要介紹Golang開發(fā)命令行及flag包的使用方法,日常命令行操作,相對應(yīng)的眾多命令行工具是提高生產(chǎn)力的必備工具,本文圍繞該內(nèi)容展開話題,需要的朋友可以參考一下
    2021-10-10
  • 深入淺出Golang中select的實現(xiàn)原理

    深入淺出Golang中select的實現(xiàn)原理

    在go語言中,select語句就是用來監(jiān)聽和channel有關(guān)的IO操作,當(dāng)IO操作發(fā)生時,觸發(fā)相應(yīng)的case操作,有了select語句,可以實現(xiàn)main主線程與goroutine線程之間的互動。本文就來詳細(xì)講講select的實現(xiàn)原理,需要的可以參考一下
    2022-08-08

最新評論

临洮县| 河津市| 应城市| 济源市| 康定县| 江陵县| 汽车| 太白县| 黎城县| 黎城县| 漳浦县| 余庆县| 临武县| 拉萨市| 大名县| 长治县| 根河市| 九江市| 泰安市| 邵阳县| 绵竹市| 阆中市| 都匀市| 紫阳县| 台中市| 崇州市| 阳江市| 洪洞县| 广汉市| 抚州市| 隆林| 图们市| 满洲里市| 清徐县| 延川县| 陵川县| 平塘县| 民乐县| 达拉特旗| 水城县| 贵南县|