0

我正在尝试使用 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 的项目中选择 id”与预期的正则表达式“从 id = ? 和归档 = 1 的项目中选择 id”

4

1 回答 1

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)
于 2021-07-20T22:10:56.840 回答