ZIMP - Unit Test Error

发布时间 2023-12-28 19:37:57作者: ZhangZhihuiAAA

 

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 afiptp@email.com}]) 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 afiptp@email.com} <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)
}