我正在尝试运行一个在数据库中执行 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
...
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.0
和
github.com/jinzhu/gorm v1.9.11
我将不胜感激任何帮助...