当前位置: 首页 > news >正文

手机做服务器建网站友情链接代码模板

手机做服务器建网站,友情链接代码模板,广州企业展厅设计公司,网页设计图片素材关于设计GoMock是一个Go框架。它与内置的测试包整合得很好#xff0c;并在单元测试时提供了灵活性。正如我们所知#xff0c;对具有外部资源#xff08;数据库、网络和文件#xff09;或依赖关系的代码进行单元测试总是很麻烦。 安装 为了使用GoMock#xff0c;我们需要安装gomo…GoMock是一个Go框架。它与内置的测试包整合得很好并在单元测试时提供了灵活性。正如我们所知对具有外部资源数据库、网络和文件或依赖关系的代码进行单元测试总是很麻烦。 安装 为了使用GoMock我们需要安装gomock包github.com/golang/mock/gomock和mockgen代码生成工具github.com/golang/mock/mockgen。使用这个命令行 go get github.com/golang/mock/gomock go get github.com/golang/mock/mockgenGoMock的使用遵循四个基本步骤 使用mockgen为你想模拟的接口生成一个模拟对象。在测试部分创建一个gomock.Controller的实例并把它传递给你的mock对象的构造函数以获得一个mock对象。在mock上调用EXPECT()来设置期望值和返回值。在模拟控制器上调用Finish()来断言模拟对象的期望。 开始 让我们创建一个这样的文件夹(本代码在 go1.16.15 版本下执行) gomock_test ├── doer │ └── doer.go ├── mocks │ └── mock_doer.go └── user├── user.go└── user_test.godoer/doer.go package doertype Doer interface {DoSomething(int, string) errorSaySomething(string) string }那么这里是我们在模拟Doer接口时要测试的代码。 user/user.go package userimport gomock_test/doerconst (filtered OKunfiltered spamNice niceBad bad )type User struct {// struct while mocking the doer interfaceDoer doer.Doer }// method Use using it func (u *User) Use() error {return u.Doer.DoSomething(123, Hello GoMock) }func (u *User) SaySomething(num int) string {if num 3 {return u.Doer.SaySomething(unfiltered)}return u.Doer.SaySomething(filtered) }type Student struct{}func (s *Student) DoSomething(_ int, _ string) error {panic(not implemented) // TODO: Implement }func (s *Student) SaySomething(kata string) string {if kata filtered {return Nice}return Bad }我们将把Doer的模拟放在一个包mocks中。我们首先创建一个包含我们的模拟实现的目录mocks然后在doer包上运行mockgen mockgen -destination../mocks/mock_doer.go -packagemocks gomock_test/doer DoerNOTE: 在执行这步的时候会报错Failed to format generated source code: mocks/mock_doer.go:5:15: expected ‘;’, found .’ 这个时候我们只需要将打印出来的代码复制到我们对应的文件中即可。 当有大量的接口/包需要模拟时为每个包和接口运行mockgen是一种乌托邦。为了缓解这个问题可以将mockgen命令与go:generate放在一起。 go:generate mockgen -destination../mocks/mock_doer.go -packagemocks gomock_test/doer Doer我们必须自己创建目录模拟因为GoMock不会为我们这样做而是会以错误退出。 destination…/mocks/mock_doer.go : 把生成的mocks放在这个路径下。-packagemocks : 把生成的mocks放在这个包里gomock_test/doer : 为这个包生成mocks。Doer : 为这个接口生成mocks必填因为我们需要指定哪个接口来生成mocks。(如果需要的话可以用逗号分隔的列表来指定多个接口。例如Doer1, Doer2) 因为我们对mockgen的调用在我们的项目中放置了一个文件mocks/mock_doer.go。这就是这样一个生成的mock实现的样子 // Code generated by MockGen. DO NOT EDIT. // Source: github.com/timliudream/go-test/gomock_test/doer (interfaces: Doer)// Package github.com/timliudream/go-test/gomock_test/mocks is a generated GoMock package. package mocksimport (gomock github.com/golang/mock/gomockreflect reflect )// MockDoer is a mock of Doer interface. type MockDoer struct {ctrl *gomock.Controllerrecorder *MockDoerMockRecorder }// MockDoerMockRecorder is the mock recorder for MockDoer. type MockDoerMockRecorder struct {mock *MockDoer }// NewMockDoer creates a new mock instance. func NewMockDoer(ctrl *gomock.Controller) *MockDoer {mock : MockDoer{ctrl: ctrl}mock.recorder MockDoerMockRecorder{mock}return mock }// EXPECT returns an object that allows the caller to indicate expected use. func (m *MockDoer) EXPECT() *MockDoerMockRecorder {return m.recorder }// DoSomething mocks base method. func (m *MockDoer) DoSomething(arg0 int, arg1 string) error {m.ctrl.T.Helper()ret : m.ctrl.Call(m, DoSomething, arg0, arg1)ret0, _ : ret[0].(error)return ret0 }// DoSomething indicates an expected call of DoSomething. func (mr *MockDoerMockRecorder) DoSomething(arg0, arg1 interface{}) *gomock.Call {mr.mock.ctrl.T.Helper()return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, DoSomething, reflect.TypeOf((*MockDoer)(nil).DoSomething), arg0, arg1) }// SaySomething mocks base method. func (m *MockDoer) SaySomething(arg0 string) string {m.ctrl.T.Helper()ret : m.ctrl.Call(m, SaySomething, arg0)ret0, _ : ret[0].(string)return ret0 }// SaySomething indicates an expected call of SaySomething. func (mr *MockDoerMockRecorder) SaySomething(arg0 interface{}) *gomock.Call {mr.mock.ctrl.T.Helper()return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, SaySomething, reflect.TypeOf((*MockDoer)(nil).SaySomething), arg0) }接下来我们在测试中定义一个模拟控制器。一个模拟控制器负责跟踪和断言其相关模拟对象的期望。我们可以通过传递一个*testing.T类型的值给它的构造函数来获得一个模拟控制器并使用它来构造一个Doer接口的模拟对象。 //core of gomock mockCtrl : gomock.NewController(t) //used to trigger final assertions. if its ignored, mocking assertions will never fail defer mockCtrl.Finish() // create a new mock object, passing the controller instance as parameter // for a newly created mock object it will accept any input and outpuite // need to define its behavior with the method expect mockDoer : mocks.NewMockDoer(mockCtrl)使用参数匹配器 在GoMock中一个参数可以被期望有一个固定的值也可以被期望与一个谓词称为匹配器相匹配。匹配器用于表示被模拟方法的预期参数范围。下列匹配器在Gomock中被预先定义了 gomock.Any() : 匹配任何值任何类型。gomock.Eq(x) : 使用反射来匹配与x深度相等的值。gomock.Nil() : 匹配nil user/user_test.go package userimport (fmtgithub.com/golang/mock/gomockgomock_test/mockstesting )func TestUse(t *testing.T) {//core of gomockmockCtrl : gomock.NewController(t)//used to trigger final assertions. if its ignored, mocking assertions will never faildefer mockCtrl.Finish()// create a new mock object, passing the controller instance as parameter// for a newly created mock object it will accept any input and outpuite// need to define its behavior with the method expectmockDoer : mocks.NewMockDoer(mockCtrl)testUser : User{Doer: mockDoer}//// Expect Do to be called once with 123 and Hello GoMock as parameters, and return nil from the mocked call.mockDoer.EXPECT().DoSomething(123, Hello GoMock).Return(nil).Times(1)fmt.Println(testUser.Use())fmt.Println() }func TestUser_SaySomething(t *testing.T) {mockCtrl : gomock.NewController(t)defer mockCtrl.Finish()mockDoer : mocks.NewMockDoer(mockCtrl)user : User{Doer: mockDoer,}type args struct {num int}tests : []struct {name stringargs argswant stringexpect func()wantErr bool}{{name: Positive test case 1,expect: func() {mockDoer.EXPECT().SaySomething(spam).Return(bad)},args: args{num: 3},wantErr: false,want: bad,},}for _, tt : range tests {t.Run(tt.name, func(t *testing.T) {tt.expect()if got : user.SaySomething(tt.args.num); (got ! tt.want) ! tt.wantErr {fmt.Println(gott :, got)t.Errorf(User.SaySomething() %v, want %v, got, tt.want)}})} }而单元测试的结果将是这样的: RUN TestUser_SaySomethingRUN TestUser_SaySomething/Positive_test_case_1 --- PASS: TestUser_SaySomething (0.00s)--- PASS: TestUser_SaySomething/Positive_test_case_1 (0.00s) PASS ok github.com/tokopedia/go_learning/udemy/pzn/gomock_test/user 1.100s
http://www.hkea.cn/news/14457825/

相关文章:

  • 郑州网站建设设计公司哪家好怎么注册网络公司
  • 万网网站备案证书东莞公司想建网站
  • 做磁力搜索网站违法吗建可收费的网站
  • 嘉兴营销型网站建设动漫设计与制作图
  • 哈尔滨市建筑企业管理站安阳安强网络科技有限公司
  • 襄垣城乡建设管理局的网站水果商城网站制作多少钱
  • 做网站对服务器什么要求高广州网络seo优化
  • 做外贸要做什么网站广告公司简介范文
  • 如何提升网站用户体验千万不要学服装设计
  • 目前流行的网站开发设计网站建设 成都
  • 中冶东北建设网站电商平台开发需要多少钱
  • 安徽国华建设工程项目管理有限公司网站莱州网站设计
  • 曲阳县做网站南海局势最新军事动态
  • 帮助传销做网站会不会判刑建设学校网站的原因
  • 政务网站的建设方案前端做企业网站
  • 推广网站有什么方法建网站都需要什么
  • 萧山建设局网站首页沈阳市做网站电话
  • 网站代码开发怎么创建一个网页
  • 类似+wordpress+建站最新远程网站建设服务器
  • seo的培训网站哪里好免费进销存软件
  • 酒类网站建设美食 wordpress
  • 大连市建设学校网站php网站开发入门到精通教程
  • 谷歌seo网站优化网站搭建找谁
  • 网站一直没有收录直接进入网站的代码
  • mcms怎么做网站关于做网站的毕业设计
  • 亚马逊的网站建设游戏公司做网站
  • 榆林电商网站建设四川网站建设免费咨询
  • 综合社区网站开发费用免费下载大都会
  • 长沙seo管理seo整站优化费用
  • 仿励志一生lz13网站整站源码wordpress 公园