小编Mai*_*eva的帖子

单元测试 sqlmock 因 sql 更新而失败

我们一直在使用 sqlmock 测试使用 select 的 func() - 没有问题。

它不适用于更新。

我们要测试的功能是:

func PutTag(tag *Tag) error {
...
    err = db.DB.Where("id=?", tag.Id).Save(tag).Error
...
}
Run Code Online (Sandbox Code Playgroud)

我们这样定义测试函数:

func (s *Suite) TestPutTag() {
    tag := Tag{Id: 2, Name: "Test Tag 2"}
    s.mock.ExpectBegin()
    s.mock.ExpectQuery("UPDATE `tags` SET `name` = ?  WHERE `tags`.`id` = ? AND ((id=?))").
        WithArgs(tag.Name, tag.Id, tag.Id)
    s.mock.ExpectCommit()
    err := PutTag(&tag)
    require.NoError(s.T(), err)
}
Run Code Online (Sandbox Code Playgroud)

这是回归..

[2019-08-30 14:36:36]  call to ExecQuery 'UPDATE `tags` SET `name` = ?  WHERE `tags`.`id` = ? AND ((id=?))' with args [{Name: …
Run Code Online (Sandbox Code Playgroud)

mysql unit-testing go go-gorm go-sqlmock

6
推荐指数
0
解决办法
1822
查看次数

标签 统计

go ×1

go-gorm ×1

go-sqlmock ×1

mysql ×1

unit-testing ×1