Go “错误”;“不应出现查询”;使用sqlmock进行单元测试时的插入

Go “错误”;“不应出现查询”;使用sqlmock进行单元测试时的插入,go,go-gorm,go-sqlmock,Go,Go Gorm,Go Sqlmock,我正在尝试运行一个单元测试来执行对DB的插入,所以我模拟了gorm日志显示的完全相同的查询字符串,使用了相同的参数,但在尝试执行测试时仍然存在问题,(使用postgres驱动程序)因为sql模拟似乎与我在模拟中定义的sql不匹配,并显示如下错误: "**call to Query** 'INSERT INTO "customer" ("customer_key","first_name","middle_name","last_surname") VALUES ($1,$2,$3,$4) RE

我正在尝试运行一个单元测试来执行对DB的插入,所以我模拟了gorm日志显示的完全相同的查询字符串,使用了相同的参数,但在尝试执行测试时仍然存在问题,(使用postgres驱动程序)因为sql模拟似乎与我在模拟中定义的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** "

存储库。转到

。。。
func(r*存储库)寄存器(customer*models.customer)(*字符串,错误){
错误:=r.db.Create(&customer)。错误
如果错误!=零{
返回零,错误
}
返回customer.CustomerKey,无
}
...
存储库\u测试。开始

func测试寄存器(t*testing.t){
qStr:=`插入“客户”(“客户密钥”、“名字”、“中间名”、“姓氏”)
值($1、$2、$3、$4)返回“客户”。“客户密钥”`
t、 运行(“如果给定的客户输入有效,则必须返回新创建的客户密钥”,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.LastName)。
WillReturnRows(sqlmock.NewRows([]字符串{“customer_key”}).AddRow(r.CustomerKey))
mock.ExpectCommit()
customerKey,err:=回购寄存器(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.
运行工具:/usr/local/go/bin/go测试-超时30s/内部/客户-运行^$
调用查询“插入到“客户”(“客户密钥”、“名字”、“中间名”、“姓氏”)值($1、$2、$3、$4)返回“客户”。“客户密钥”带有参数[{name:Ordinal:1值:RLKuxK-wnj8SUn50iFMjsrCtikTLTEmUFP7fOSE2veI=}
{Name:Ordinal:2值:Martín}{Name:Ordinal:3值:Constan}
{名称:序号:4值:史密斯}]

不是预期的。您确定gorm在表/字段名周围使用双引号发送准确的查询吗?检查这些是否为单引号。