2

我正在尝试运行一个在数据库中执行 INSERT 的单元测试,所以我使用相同的参数模拟了 gorm 日志显示的完全相同的查询字符串,但我在尝试执行测试时仍然遇到问题,(使用 postgres驱动程序),因为似乎 sql-mock 与我在模拟中定义的 SQL 不匹配并显示如下错误:

"**call to Query** 'INSERT  INTO "customer" ("customer_key","first_name","middle_name","last_surname") VALUES ($1,$2,$3,$4) RETURNING "customer"."customer_key"' with args 
[{Name: Ordinal:1 Value:RLKuxK-wnj8SUn50iFMjsrCtikTLTEmUFP7fOSE2veI=}
 {Name: Ordinal:2 Value:Martín} {Name: Ordinal:3 Value:Constan} 
{Name: Ordinal:4 Value:Smith}] 
**was not expected** "

GO Playgound 跑步示例

存储库.go

...
func (r *repository) Register(customer *models.Customer) (*string, error) {
    err := r.db.Create(&customer).Error
    if err != nil {
        return nil, err
    }

    return customer.CustomerKey, nil
}
...

repository_test.go

func TestRegister(t *testing.T) {
    qStr := `INSERT  INTO "customer" ("customer_key","first_name","middle_name","last_surname") 
    VALUES ($1,$2,$3,$4) RETURNING "customer"."customer_key"`

    t.Run("Must return the newly created customer key, if given customer input is valid", func(t *testing.T) {
        r := mocks.CustomerModel

        mock.MatchExpectationsInOrder(false)
        mock.ExpectBegin()
        mock.ExpectQuery(regexp.QuoteMeta(qStr)).
            WithArgs(r.CustomerKey, r.FirstName, r.MiddleName, r.LastSurname).
            WillReturnRows(sqlmock.NewRows([]string{"customer_key"}).AddRow(r.CustomerKey))
        mock.ExpectCommit()
        customerKey, err := repo.Register(r)

        assert.Nil(t, err)
        assert.NotNil(t, customerKey)
    })
}

我收到以下错误:

Running tool: /usr/local/go/bin/go test -timeout 30s /internal/customer -run ^(TestRegister)$
call to Query 'INSERT  INTO "customer" ("customer_key","first_name","middle_name","last_surname") VALUES ($1,$2,$3,$4) RETURNING "customer"."customer_key"' with args [{Name: Ordinal:1 Value:RLKuxK-wnj8SUn50iFMjsrCtikTLTEmUFP7fOSE2veI=}
 {Name: Ordinal:2 Value:Martín} {Name: Ordinal:3 Value:Constan} 
{Name: Ordinal:4 Value:Smith}] 
was not expected <----------------------ERROR-------------------------

INSERT  INTO "customer" ("customer_key","first_name","middle_name","last_surname") VALUES ('RLKuxK-wnj8SUn50iFMjsrCtikTLTEmUFP7fOSE2veI=','Martín','','Constan','Smith'') RETURNING "customer"."customer_key"  
[0 rows affected or returned ]

[35m(data-repository/internal/customer/repository.go:57)[0m 
[33m[2020-01-22 19:39:18][0m [31;1m call to Query 'INSERT INTO "customer" ("customer_key","first_name","middle_name","last_surname") VALUES ($1,$2,$3,$4) RETURNING "customer"."customer_key"' with args [{Name: Ordinal:1 Value:RLKuxK-wnj8SUn50iFMjsrCtikTLTEmUFP7fOSE2veI=} {Name: Ordinal:2 Value:Martín} {Name: Ordinal:3 Value:Constan} {Name: Ordinal:4 Value:Smith}] 
was not expected <----------------------ERROR AGAIN-------------------------

--- FAIL: TestRegister (0.00s)
    --- FAIL: TestRegister/Must_return_the_newly_created_customer_key,_if_given_customer_input_is_valid (0.00s)
        data-repository/internal/customer/repository_test.go:89: 
                Error Trace:    repository_test.go:89
                Error:          Expected nil, but got: &status.statusError{Code:13, Message:"An error occurred.", Details:[]*any.Any{(*any.Any)(0xc000215f90)}, XXX_NoUnkeyedLiteral:struct {}{}, XXX_unrecognized:[]uint8(nil), XXX_sizecache:0}
                Test:           TestRegister/Must_return_the_newly_created_customer_key,_if_given_customer_input_is_valid
FAIL
FAIL    /internal/customer  0.008s
FAIL
Error: Tests failed.

我正在使用以下版本:

github.com/DATA-DOG/go-sqlmock v1.4.0github.com/jinzhu/gorm v1.9.11

我将不胜感激任何帮助...

4

0 回答 0