午夜视频免费看_日韩三级电影网站_国产精品久久一级_亚洲一级在线播放_人妻体内射精一区二区三区_91夜夜揉人人捏人人添红杏_91福利在线导航_国产又粗又猛又黄又爽无遮挡_欧美日韩一区在线播放_中文字幕一区二区三区四区不卡 _日日夜夜精品视频免费观看_欧美韩日一区二区三区

主頁 > 知識庫 > 用gomock進行mock測試的方法示例

用gomock進行mock測試的方法示例

熱門標簽:中國地圖標注省會高清 學海導航地圖標注 江西轉化率高的羿智云外呼系統 西部云谷一期地圖標注 廣州呼叫中心外呼系統 地圖標注的汽車標 高德地圖標注口訣 南通如皋申請開通400電話 浙江高速公路地圖標注

在開發過程中往往需要配合單元測試,但是很多時候,單元測試需要依賴一些比較復雜的準備工作,比如需要依賴數據庫環境,需要依賴網絡環境,單元測試就變成了一件非常麻煩的事情。舉例來說,比如我們需要請求一個網頁,并將請求回來的數據進行處理。在剛開始的時候,我通常都會先啟動一個簡單的http服務,然后再運行我的單元測試。可是這個單元測試測起來似乎非常笨重。甚至在持續集成過程中,我還為了能夠自動化測試,特意寫了一個腳本自動啟動相應的服務。事情似乎需要進行一些改變。

mock對象就是為了解決上面的問題而誕生的,mock(模擬)對象能夠模擬實際依賴對象的功能,同時又不需要非常復雜的準備工作,你需要做的,僅僅就是定義對象接口,然后實現它,再交給測試對象去使用。

go-mock是專門為go語言開發的mock庫,該庫使用方式簡單,支持自動生成代碼,可以說是不可多得的好工具。下面我就簡單地展示一下go-mock是如何工作的:

首先你需要做的是將依賴下載到本地:

go get github.com/golang/mock/gomock
go get github.com/golang/mock/mockgen

第一個是代碼依賴,第二個是命令行工具(特別好用)。

下面用一個非常簡單的例子來說明gomock是如何工作的:

我在$GOPATH/src目錄下新建一個項目:hellomock,在$GOPATH/src/hellomock目錄下新建hellomock.go,并定義一個接口Talker:

package hellomock

type Talker interface {
  SayHello(word string)(response string)
}

然后我們需要一個實現了Talker功能的結構體,假設我們有這樣的場景,我們現在有一個迎賓的崗位,需要一個能夠迎賓的迎賓員,當然這個迎賓員可以是一個人,或者是一只鸚鵡。那么我們需要做的是,定義一個Persion結構體(或者是鸚鵡或者是別的什么東西),并實現Talker接口:

person.go

package hellomock

import "fmt"

type Person struct{
 name string
}

func NewPerson(name string)*Person{
 return Person{
   name:name,
 }
}


func (p *Person)SayHello(name string)(word string) {
 return fmt.Sprintf("Hello %s, welcome come to our company, my name is %s",name,p.name)  
}

現在我們的Person已經實現了Talker接口,現在我們讓他發揮作用吧!

現在假設,我們有一個公司,公司有一個迎賓員,也就是我們的前臺妹子,這個妹子實現了Talker接口.她能夠自動向來的客人SayHello:

company.go

package hellomock

type Company struct {
 Usher Talker
}

func NewCompany(t Talker) *Company{
 return Company{
  Usher:t,
 }
}

func ( c *Company) Meeting(gusetName string)string{
 return c.Usher.SayHello(gusetName)
}

我們的場景已經設計好了,那么我們傳統的話,會如何實現單元測試呢?

company_test.go

package hellomock

import "testing"

func TestCompany_Meeting(t *testing.T) {
  person := NewPerson("王尼美")
  company := NewCompany(person)
  t.Log(company.Meeting("王尼瑪"))
}

測試之:

/usr/local/go/bin/go test -v hellomock -run ^TestCompany_Meeting$

  company_test.go:8: Hello 王尼瑪, welcome come to our company, my name is 王尼美

ok   hellomock  0.013s

現在我們構造一個王尼美還是很簡單的,但是我們現在要用mock對象進行模擬,這時mockgen就登場了:

➜  hellomock> mkdir mock                                       
➜  hellomock> mockgen -source=hellomock.go > mock/mock_Talker.go

這個時候,將會生成mock/mock_Talker.go文件:

需要注意的是,自動生成的文件同源文件在不同的包下,需要新建一個目錄存放

我們并不需要在意生成文件的內容,我們只需要知道如何去使用即可

mock_Talker.go

// Automatically generated by MockGen. DO NOT EDIT!
// Source: hellomock.go

package mock_hellomock

import (
  gomock "github.com/golang/mock/gomock"
)

// MockTalker is a mock of Talker interface
type MockTalker struct {
  ctrl   *gomock.Controller
  recorder *MockTalkerMockRecorder
}

// MockTalkerMockRecorder is the mock recorder for MockTalker
type MockTalkerMockRecorder struct {
  mock *MockTalker
}

// NewMockTalker creates a new mock instance
func NewMockTalker(ctrl *gomock.Controller) *MockTalker {
  mock := MockTalker{ctrl: ctrl}
  mock.recorder = MockTalkerMockRecorder{mock}
  return mock
}

// EXPECT returns an object that allows the caller to indicate expected use
func (_m *MockTalker) EXPECT() *MockTalkerMockRecorder {
  return _m.recorder
}

// SayHello mocks base method
func (_m *MockTalker) SayHello(name string) string {
  ret := _m.ctrl.Call(_m, "SayHello", name)
  ret0, _ := ret[0].(string)
  return ret0
}

// SayHello indicates an expected call of SayHello
func (_mr *MockTalkerMockRecorder) SayHello(arg0 interface{}) *gomock.Call {
  return _mr.mock.ctrl.RecordCall(_mr.mock, "SayHello", arg0)
}

接下來看看如何去使用這個mock對象,新建一個單元測試:

func TestCompany_Meeting2(t *testing.T) {
  ctl := gomock.NewController(t)
  mock_talker := mock_hellomock.NewMockTalker(ctl)
  mock_talker.EXPECT().SayHello(gomock.Eq("王尼瑪")).Return("這是自定義的返回值,可以是任意類型。")

  company := NewCompany(mock_talker)
  t.Log(company.Meeting("王尼瑪"))
  //t.Log(company.Meeting("張全蛋"))
}

測試之:

/usr/local/go/bin/go test -v hellomock -run ^TestCompany_Meeting2$
  company_test.go:21: 這是自定義的返回值,可以是任意類型。
ok   hellomock  0.015s

可以看到,返回的是我們在mock對象上定義的返回值。

需要說明的一點是,mock對象的SayHello可以接受的參數有gomock.Eq(x interface{})和gomock.Any(),前一個要求測試用例入餐嚴格符合x,第二個允許傳入任意參數。比如我們在注釋掉的測試中傳入了"張全蛋",結果報錯,測試失敗:

/usr/local/go/bin/go test -v hellomock -run ^TestCompany_Meeting2$
  controller.go:113: no matching expected call: *mock_hellomock.MockTalker.SayHello([張全蛋])
exit status 1
FAIL  hellomock  0.007s

本文作為拋磚引玉,gomock還有很多高級用法,希望大家能夠自行探索。

參考文章:

https://github.com/golang/mock/blob/master/README.md

https://github.com/grpc/grpc-go/blob/master/Documentation/gomock-example.md

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • 使用Gomock進行單元測試的方法示例

標簽:德宏 保定 貴州 吐魯番 東營 曲靖 許昌 常州

巨人網絡通訊聲明:本文標題《用gomock進行mock測試的方法示例》,本文關鍵詞  用,gomock,進行,mock,測試,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《用gomock進行mock測試的方法示例》相關的同類信息!
  • 本頁收集關于用gomock進行mock測試的方法示例的相關信息資訊供網民參考!
  • 推薦文章
    搜索黄色一级片| 国产a视频免费观看| 亚洲成人7777| 日韩免费av片| 国产一区玩具在线观看| 亚洲视频精选在线| 国产精品嫩草av| 欧美黄色免费网站| 蜜臀久久99精品久久久画质超高清| 亚洲一区 在线播放| 亚洲福利在线观看| 在线播放国产一区| 欧美亚洲日本一区二区三区 | 亚洲一二三专区| 91传媒免费观看| 九九九九九九精品| 精品日韩视频在线观看| 久草免费在线视频观看| 亚洲一区高清| 精品999在线播放| 国内成人自拍视频| 午夜性福利视频| 国产精品女主播视频| 国产精品久久久爽爽爽麻豆色哟哟 | 亚洲女人****多毛耸耸8| 久草成人在线视频| 伊人狠狠色丁香综合尤物| 欧美一区二区三区四区五区| 韩日av一区二区| 特级特黄刘亦菲aaa级| 欧美一区二区视频97| 在线视频一区二区三| 911美女片黄在线观看游戏| 欧美日韩亚洲一| 久久久久久久久久av| 欧美午夜激情视频| 亚洲国产精品suv| 黄色三级视频片| 欧美孕妇孕交黑巨大网站| 日本精品一区二区三区高清| 中文字幕精品在线观看| 污片免费在线观看| 久久久精品日韩| 日韩.欧美.亚洲| 中文字幕人成不卡一区| 精品人妻一区二区三区日产乱码卜| 亚洲free性xxxx护士白浆| 日韩免费福利电影在线观看| 精品写真视频在线观看 | 中文字幕乱码免费| 欧美专区福利在线| 亚洲国产精品久久不卡毛片 | 成人动漫视频在线观看免费| 亚洲人成欧美中文字幕| 亚洲欧美日韩国产综合| 首页亚洲欧美制服丝腿| 中文字幕第24页| 红桃av在线播放| 99久久免费国| 在线观看不卡av| 精品视频在线免费观看| 成人小说亚洲一区二区三区| 天天操夜夜操av| 麻豆精品国产传媒| 亚洲制服欧美久久| 久久这里只有精品视频首页| 欧美人妇做爰xxxⅹ性高电影| 久久夜色精品一区| 免费在线观看日韩欧美| 亚洲一区在线观| 久久久久成人精品无码| 999香蕉视频| 亚洲国产另类久久久精品极度| 亚洲欧洲国产伦综合| 黄色精品在线看| 青青草伊人久久| 欧美三级网站在线观看| 日韩高清一二三区| 亚洲高清不卡一区| 久久国产精品一区二区三区四区| 国产精品激情自拍| 国产一区av在线| 亚洲成人三级在线| 亚洲在线中文字幕| 综合久久久久久久| 国产精品18久久久久久久久| 国产黄色美女视频| 中文字幕有码视频| 天海翼一区二区| 国产一二三四五区| 女性生殖扒开酷刑vk| 亚洲最大成人在线观看| 亚洲高清精品中出| 国产91aaa| 51国产成人精品午夜福中文下载| 日韩中文字幕视频在线观看| 日韩三级高清在线| 在线免费观看视频一区| 一本久久综合亚洲鲁鲁五月天| 久久蜜臀精品av| 日本中文一区二区三区| 青青草成人在线观看| 一二区在线观看| 中文字幕在线欧美| 波多野结衣网站| 五月天激情四射| 精品国产免费观看| 欧美特黄aaaaaa| 在线观看福利片| 午夜免费福利影院| 国产网站无遮挡| 小早川怜子一区二区三区| 动漫av免费观看| 伊人久久婷婷色综合98网| 久久在线中文字幕| 大荫蒂性生交片| 黄色在线视频网| 污视频网址在线观看| xxx中文字幕| 给我免费观看片在线电影的| 国产免费无码一区二区| 日韩成人精品视频在线观看| www.日日操| 亚欧在线免费观看| 中文字幕免费高清在线| 精品人妻一区二区乱码| 国产在线观看免费播放| 蜜桃色一区二区三区| 中文字幕avav| 蜜桃av免费在线观看| 日本一区二区不卡在线| av网站免费大全| 香蕉av在线播放| 久久激情五月婷婷| 精品一区二区在线播放| 人妻一区二区三区四区| av中文字幕在线不卡| 久久精品网址| 97aⅴ精品视频一二三区| 欧美激情在线一区二区三区| 天天综合日日夜夜精品| 国产精品久久午夜夜伦鲁鲁| 久久婷婷一区二区三区| 一区二区三区精品视频在线| 欧美撒尿777hd撒尿| 久久久国产视频| 99国产在线视频| 免费黄色日本网站| 我想看黄色大片| 丰满少妇xoxoxo视频| 另类的小说在线视频另类成人小视频在线 | 日本三级中文字幕| 午夜视频在线免费播放| 久久精品亚洲一区二区三区浴池| 五月婷婷久久丁香| 亚洲精品视频免费在线观看| 欧美激情视频网站| 亚洲国产精品一区二区第四页av| wwwwxxxx日韩| 日本在线小视频| 国产美女在线精品| 欧美性猛交xxxxxxxx| 91精品国产91久久| h无码动漫在线观看| 亚洲人成人无码网www国产 | 国产狼人综合免费视频| 免费午夜视频在线观看| 香港三级日本三级| 中文字幕人妻互换av久久 | 亚洲国产乱码最新视频 | 亚洲欧洲一区二区| 特级西西人体wwwww| 怡红院男人的天堂| 蜜臀久久久久久久| 在线观看日韩高清av| 欧美精品性视频| 水蜜桃在线免费观看| 日本a级片视频| 国产91精品精华液一区二区三区| 欧美日韩视频在线观看一区二区三区| 午夜精品国产精品大乳美女| 免费人成自慰网站| 五月婷婷中文字幕| 亚洲欧洲成人自拍| 一本大道亚洲视频| 亚洲欧美日韩国产yyy| 无套内谢大学处破女www小说| 天堂中文在线看| 欧美性猛交xxxx偷拍洗澡| 久久青草福利网站| 最新中文字幕免费视频| 人人妻人人爽人人澡人人精品 | 欧美日韩精品三区| 国产v亚洲v天堂无码| 香蕉久久久久久av成人| 午夜成人免费影院| 日韩欧美国产不卡| 久久精精品视频| a级片在线观看| 国产一区视频在线看| 欧美网站大全在线观看| 欧美色欧美亚洲另类七区| 9999热视频| 国产精品久久一卡二卡| 久久久久久尹人网香蕉| 自慰无码一区二区三区| 国产精品天天操| 日韩一区二区三区免费看| 精品福利影视| 国产无码精品久久久| 亚洲综合色视频| 精品毛片久久久久久| 熟女少妇a性色生活片毛片| 国产日产欧产精品推荐色| 国产精品久久久久久久久久久久 | 成人羞羞国产免费网站| 亚洲国产999| 日韩美女视频在线| 日韩中文一区二区三区| 国产午夜福利精品| 亚洲成av人**亚洲成av**| 久久久久久久久久久久久久一区| 黄色一级视频免费| 色婷婷久久久亚洲一区二区三区| 亚洲va欧美va在线观看| 人妻视频一区二区| 中文字幕av一区 二区| 4k岛国日韩精品**专区| 国产精品成人无码免费| 国产精品国产自产拍高清av| 国产精品av在线| 手机av在线看| 在线免费观看日本一区| 自拍偷拍视频在线| 久久国产日本精品| 欧美国产日韩一区二区| 成人在线观看免费高清| 丰满岳妇乱一区二区三区| 日韩在线国产| 久久精品国产色蜜蜜麻豆| 欧美黄色小视频| 黄色aaa视频| 亚洲老妇xxxxxx| 国模一区二区三区私拍视频| 国产香蕉在线视频| 精品国产乱码久久久久久免费| 免费无码国产v片在线观看| 国精品人妻无码一区二区三区喝尿 | 天天爽夜夜爽人人爽| 欧美一区二区三区视频免费| 欧美日韩亚洲在线| 午夜成人鲁丝片午夜精品| 日日噜噜噜夜夜爽亚洲精品| 亚洲女则毛耸耸bbw| 香蕉加勒比综合久久| 黄色一级视频在线播放| 岛国av在线一区| 国产精品自拍偷拍| 成人免费视频国产免费麻豆| 国产不卡一区二区在线播放| 69av视频在线观看| 久久99精品国产99久久6尤物| 免费无码一区二区三区| 欧美丝袜丝交足nylons图片| 男人的天堂avav| 久久精品国产亚洲高清剧情介绍| 成人免费激情视频| 老牛影视一区二区三区| 91色p视频在线| 欧美视频在线观看一区二区三区| 97久久精品人搡人人玩 | 国产一区免费在线观看| 天天干在线观看| 国产精品成久久久久三级| 人妻偷人精品一区二区三区| 国产精品成人在线| 日韩精品一区第一页| 狠狠色噜噜狠狠色综合久| 久久久xxx| 动漫一区二区在线| 国产精品99久久久久久久vr| 精品国产乱码久久久久久蜜柚 | 亚洲精品无码国产| 性做久久久久久免费观看欧美| 欧美亚洲黄色片| 亚洲一区二区视频在线观看| www.com污| 午夜精品久久久久久不卡8050| 樱花草www在线| 精品久久久久一区| 内射一区二区三区| 色综合久久88色综合天天看泰| 国产成人在线观看网站| 日av在线播放中文不卡| 国产精品久久久久久久久久久久久久久久久久 | 国产亚洲欧美日韩美女| 91porny九色| 亚洲一区中文字幕| 99这里只有精品| 六月婷婷在线视频| 色综合天天综合网天天看片| av不卡中文字幕| 亚洲人在线观看| 99精品久久久久久中文字幕| 91中文在线视频| 国产日韩欧美综合在线| wwwwww.色| 亚洲人成在线免费观看| 正在播放亚洲精品| 91久久精品国产91久久性色tv | 999日本视频| 久久久另类综合| 亚洲18在线看污www麻豆| 精品国产乱码久久久久久闺蜜| 日韩免费一二三区| 欧美xxxx黑人| 成人欧美一区二区三区在线湿哒哒 | 国产免费无码一区二区视频| 欧美做受高潮1| av成人免费在线观看| 亚洲欧美日韩一级| 亚洲美女性生活视频| 男人的天堂a在线| 欧美亚洲精品一区二区| 精品亚洲男同gayvideo网站| www.超碰在线.com| 伊人久久大香线蕉精品| 五月婷婷久久丁香| 久久久久99精品成人片我成大片| 欧美影视一区二区| 天天亚洲美女在线视频| 国产91精品看黄网站在线观看| 99视频网站| 欧美在线观看你懂的| 中文字幕二区三区| 国产a级片网站| 日韩国产精品视频| 污视频在线免费| 香蕉精品视频在线| 在线一区二区三区| 国产精品欧美激情在线| 真人抽搐一进一出视频| 日韩精品中文字幕在线观看| 五十路在线观看| aaa一级黄色片| 国产精品444| 欧美性猛交xxxx富婆弯腰| 青青草av在线播放| 国产91porn| 欧美成在线观看| 久久婷婷综合激情| 亚洲伦理一区二区三区| 日韩高清国产精品| 午夜精品一区二区三区在线| 国产婷婷精品av在线| x88av在线| 久久成人免费网| 日韩精品在在线一区二区中文| 日本一区二区在线不卡| 中文字幕有码视频| 一本色道久久亚洲综合精品蜜桃| 精品日韩欧美| 久久99国产精品| 国产福利久久精品| 91亚洲va在线va天堂va国| 国产精品爽爽爽| 亚洲伊人久久综合| 成人黄色av免费在线观看| 91成人在线视频| 色悠悠国产精品| 欧美高清视频一二三区| 成人av网在线| 三级在线观看网站| 男人操女人下面视频| 国产深夜男女无套内射| 精品国产91亚洲一区二区三区www| 欧美成人免费全部| 欧美精品一区二区三区视频| 亚洲国产精品精华液2区45| 中文字幕永久免费视频| 日本人妻一区二区三区| 国产深夜男女无套内射| 一区二区三区四区欧美| 亚洲资源视频| a天堂资源在线观看| 国产亚洲欧美一区二区| 午夜剧场成人观在线视频免费观看 | 亚洲天堂网av在线| 欧美日韩亚洲一| 激情五月五月婷婷| 精品国产综合区久久久久久| 欧美在线精品免播放器视频| 亚洲a∨日韩av高清在线观看| 日本在线高清视频一区| 能在线观看的av| 国产欧美视频一区| 在线观看黄网址| 免费在线观看黄视频| 国产无精乱码一区二区三区| 伦av综合一区| 自拍偷拍精品视频| 在线观看精品国产| 波多野结衣喷潮| 黄色一级片在线免费观看| 日本激情综合网| 欧美特黄aaa| 久国产精品视频| 大肉大捧一进一出好爽视频| 一级黄色片国产| 日本少妇xxxx软件|