繁体   English   中英

在 Go 中使用映射模拟选择返回预期的事务开始错误

[英]Mocking a select with mapping in Go is returning expected transaction begin error

我正在尝试使用 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:“select id from project where id = ? and archived = 1”与预期的正则表达式“select id from project where id = ? and archived = 1”

好吧,用户响应@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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM