github.com/qiuhoude/go-web@v0.0.0-20220223060959-ab545e78f20d/prepare/24_gomock/user/user_test.go (about) 1 package user 2 3 import ( 4 "github.com/golang/mock/gomock" 5 "github.com/qiuhoude/go-web/prepare/24_gomock/mock" 6 "testing" 7 ) 8 9 func TestUser_GetUserInfo(t *testing.T) { 10 // 返回 gomock.Controller,它代表 mock 生态系统中的顶级控件.定义了 mock 对象的范围、生命周期和期待值. 11 // 另外它在多个 goroutine 中是安全的 12 ctl := gomock.NewController(t) 13 defer ctl.Finish() 14 15 var id int64 = 1 16 // 创建一个新的 mock 实例 17 mockMale := mock.NewMockMale(ctl) 18 19 // 声明给定的调用应按顺序进行(是对 gomock.After 的二次封装) 20 21 gomock.InOrder( 22 // 这里有三个步骤,EXPECT()返回一个允许调用者设置期望和返回值的对象.Get(id) 是设置入参并调用 mock 实例中的方法.Return(nil) 23 // 是设置先前调用的方法出参.简单来说,就是设置入参并调用,最后设置返回值 24 mockMale.EXPECT().Get(id).Return(nil).MaxTimes(10), 25 ) 26 27 user := NewUser(mockMale) 28 err := user.GetUserInfo(id) 29 if err != nil { 30 t.Errorf("user.GetUserInfo err: %v", err) 31 } 32 }