我正在尝试使用go-sqlmock进行一个简单的单元测试,以完成一个选择并返回一个映射的ID。
s.sqlmock.ExpectBegin()
s.sqlmock.
ExpectQuery("select `id` from `project` where `id` = \\? and `archived` = \\1").
WithArgs(2).
WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(strconv.Itoa(1)))
s.sqlmock.ExpectCommit()我想测试的实现的代码片段是:
...
type Project struct{ Id int64 }
var project Project
tx.Raw("select id from project where id = ? and archived = 1", values["projectId"]).Scan(&project)
...但会发生以下错误:

我试过一些例子,但没有成功。我感谢你们的帮助
更新
我试图删除代码的s.sqlmock.ExpectBegin() and s.sqlmock.ExpectCommit()并更改查询,如下所示:
s.sqlmock.
ExpectQuery("select id from project where id = ? and archived = 1").
WithArgs(2).
WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(strconv.Itoa(1)))但会发生以下错误:
查询:无法匹配实际的sql:“从项目选择id =?和存档= 1”与预期的regexp“从id =?的项目选择id和
归档=1”
发布于 2021-07-20 22:10:56
嗯,用户回复@mh-cbon运行得很好。我将默认的匹配器替换为完全区分大小写,并且测试通过了!
在此之前:
var sqlDB *sql.DB
sqlDB, s.sqlmock, _ = sqlmock.New()
s.db, _ = gorm.Open("mysql", sqlDB)之后:
var sqlDB *sql.DB
sqlDB, s.sqlmock, _ = sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual))
s.db, _ = gorm.Open("mysql", sqlDB)https://stackoverflow.com/questions/68461212
复制相似问题