首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQLMock -模拟链式DELETE查询

SQLMock -模拟链式DELETE查询
EN

Stack Overflow用户
提问于 2020-06-22 13:21:56
回答 1查看 519关注 0票数 0

我目前正在尝试为一个数据库查询写一个测试,但坚持要找出如何模拟它。

我有以下结构(供您参考):

代码语言:javascript
复制
type User struct {
 ID        uint      `gorm:"column:id;primary_key"`
 CreatedAt time.Time `gorm:"column:created_at"`
 UpdatedAt time.Time `gorm:"column:updated_at"`
 GroupID   uint      `gorm:"column:group_id" sql:"index"`
}

我有一个删除具有相同GroupID的所有Users的查询

代码语言:javascript
复制
/*
  user is an empty User struct
  groupID is an uint declared during test initialization (in this case, set to value 1)
*/
err := d.db.Where("group_id = ?", groupID).Delete(&user).GetErrors()

显然,上面的查询结果如下(从测试错误中取出):

代码语言:javascript
复制
call to ExecQuery 'DELETE FROM "users"  WHERE (group_id = $1)' with args [{Name: Ordinal:1 Value:1}]

我可以匹配查询字符串,但无法匹配参数,因为它是作为结构传入的。可以用go-sqlmock模拟这个调用吗?或者我必须更改我的查询才能模拟它吗?

EN

回答 1

Stack Overflow用户

发布于 2021-04-02 12:56:22

是的,这可以用go-sqlmock来模拟,

对于此查询,err = s.Db.Delete(&user).Error

我曾经这样嘲笑过

代码语言:javascript
复制
db, mock, err := sqlmock.New()
if err != nil {
    t.Fatalf("an error '%s' was not expected when opening a stub database connection", err)
}
defer db.Close()
mock.ExpectBegin()
mock.ExpectExec(regexp.QuoteMeta("DELETE")).WithArgs(1).WillReturnResult(sqlmock.NewResult(1, 1))
mock.ExpectCommit()
gormdb, err := gorm.Open("postgres", db)
if err != nil {
    t.Errorf("Failed to open gorm db, got error: %v", err)
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62507911

复制
相关文章

相似问题

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