Running tool: /usr/local/go/bin/go test -timeout 30s -run ^TestCreateUserAPI$ github.com/ZhangZhihuiAAA/zimplebank/gapi -count=1 -v === RUN TestCreateUserAPI === RUN TestCreateUserAPI/OK /zdata/Github/zimplebank/gapi/rpc_create_user.go:33: Unexpected call to *mockdb.MockStore.CreateUser([context.Background {gyvclh $2a$10$7wUAC1GwMS2Ge5egd3tUven2S91j7GkvcTmNKRiJVWJwSEjzIHCue hzltgv [email protected]}]) at /zdata/Github/zimplebank/gapi/rpc_create_user.go:33 because: there are no expected calls of the method "CreateUser" for that receiver /zdata/Github/zimplebank/gapi/controller.go:243: missing call(s) to *mockdb.MockStore.CreateUserTx(is anything, matches arg {{gyvclh hzltgv [email protected]} <nil>} and password axdvdw) /zdata/Github/zimplebank/gapi/rpc_create_user_test.go:47 /zdata/Github/zimplebank/gapi/controller.go:243: aborting test due to missing call(s) --- FAIL: TestCreateUserAPI (0.10s) --- FAIL: TestCreateUserAPI/OK (0.05s) FAIL FAIL github.com/ZhangZhihuiAAA/zimplebank/gapi 0.102s
The failure point is at below function:
func (e eqCreateUserTxParamsMatcher) Matches(x any) bool { arg, ok := x.(db.CreateUserTxParams) if !ok { return false } err := util.CheckPassword(e.password, arg.HashedPassword) if err != nil { return false } e.arg.HashedPassword = arg.HashedPassword return reflect.DeepEqual(e.arg, arg) }
This is because the arg has a function field, but there's no way in Go to compare two functions:
type CreateUserTxParams struct { CreateUserParams AfterCreate func(user User) error }
So only compare the first field:
func (e eqCreateUserTxParamsMatcher) Matches(x any) bool { arg, ok := x.(db.CreateUserTxParams) if !ok { return false } err := util.CheckPassword(e.password, arg.HashedPassword) if err != nil { return false } e.arg.HashedPassword = arg.HashedPassword return reflect.DeepEqual(e.arg.CreateUserParams, arg.CreateUserParams) }
标签:return,zimplebank,gapi,HashedPassword,go,arg,Test,ZIMP,Unit From: https://www.cnblogs.com/zhangzhihui/p/17933413.html