首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Go中模拟带有映射的选择将返回预期的事务开始错误

在Go中模拟带有映射的选择将返回预期的事务开始错误
EN

Stack Overflow用户
提问于 2021-07-20 20:53:10
回答 1查看 855关注 0票数 0

我正在尝试使用go-sqlmock进行一个简单的单元测试,以完成一个选择并返回一个映射的ID。

代码语言:javascript
复制
    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()

我想测试的实现的代码片段是:

代码语言:javascript
复制
...

    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()并更改查询,如下所示:

代码语言:javascript
复制
    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”

EN

回答 1

Stack Overflow用户

发布于 2021-07-20 22:10:56

嗯,用户回复@mh-cbon运行得很好。我将默认的匹配器替换为完全区分大小写,并且测试通过了!

在此之前:

代码语言:javascript
复制
    var sqlDB *sql.DB

    sqlDB, s.sqlmock, _ = sqlmock.New()
    s.db, _ = gorm.Open("mysql", sqlDB)

之后:

代码语言:javascript
复制
    var sqlDB *sql.DB

    sqlDB, s.sqlmock, _ = sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual))
    s.db, _ = gorm.Open("mysql", sqlDB)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68461212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档