Go “错误”;“不应出现查询”;使用sqlmock进行单元测试时的插入
我正在尝试运行一个单元测试来执行对DB的插入,所以我模拟了gorm日志显示的完全相同的查询字符串,使用了相同的参数,但在尝试执行测试时仍然存在问题,(使用postgres驱动程序)因为sql模拟似乎与我在模拟中定义的sql不匹配,并显示如下错误: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
"**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在表/字段名周围使用双引号发送准确的查询吗?检查这些是否为单引号。