Mai*_*eva 6 mysql unit-testing go go-gorm go-sqlmock
我们一直在使用 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: Ordinal:1 Value:Test Tag 2} {Name: Ordinal:2 Value:2} {Name: Ordinal:3 Value:2}], was not expected, next expectation is: ExpectedQuery => expecting Query, QueryContext or QueryRow which:
- matches sql: 'UPDATE `tags` SET `name` = ? WHERE `tags`.`id` = ? AND ((id=?))'
- is with arguments:
0 - Test Tag 2
1 - 2
2 - 2
Run Code Online (Sandbox Code Playgroud)
sql语句对我来说似乎是一样的。
| 归档时间: |
|
| 查看次数: |
1822 次 |
| 最近记录: |