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  }