登录
首页 >  Golang >  Go问答

可以在 goroutine 中使用 sqlmock 进行查询测试吗?

来源:stackoverflow

时间:2024-02-05 22:24:21 138浏览 收藏

大家好,我们又见面了啊~本文《可以在 goroutine 中使用 sqlmock 进行查询测试吗?》的内容中将会涉及到等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相关文章,希望我们能一起进步!下面就开始本文的正式内容~

问题内容

我的应用程序中有这段代码,我使用 goroutine,因为查询非常慢。代码工作正常,但我一直在尝试使用 sqlmock 测试该函数,但出现了很多误报和困难,我该怎么做才能使用 sqlmock 测试这些查询? (观察:我使用过 postgres)

func(r repository) Queries(ctx context.Context) (*models.MyModel, error) {
    var users int64
    var services int64
    var sells int64

    queryReponses := make(chan *gorm.DB, 3)

    go func(){
        queryResponses <- r.db.Raw("SELECT COUNT(*) FROM deposits").Find(&users)
    }()
    go func(){
        queryResponses <- r.db.Raw("SELECT COUNT(*) FROM services").Find(&users)
    }()
    go func(){
        queryResponses <- r.db.Raw("SELECT COUNT(*) FROM sells").Find(&users)
    }()

    for i := 0; i < 3; i += 1 {
        queryResponse := <-queryReponses
        if queryResponse.Error != nil {
            return &models.MyModel{}, fmt.Errorf(queryResponse.Error)
        }
    }

    return &models.MyModel{
        Users: users,
        Services: services,
        Sells: sells,
    }
}

正确答案


您同时修改相同的值,使用 -race 检测器标志运行测试来检测它

go func(){
        queryresponses <- r.db.raw("select count(*) from deposits").find(&users)
    }()
-    go func(){
        queryresponses <- r.db.raw("select count(*) from services").find(&users)
+    go func(){
        queryresponses <- r.db.raw("select count(*) from services").find(&services)
    }()
-    go func(){
        queryresponses <- r.db.raw("select count(*) from sells").find(&users)
    }()
+    go func(){
        queryresponses <- r.db.raw("select count(*) from sells").find(&sells)
    }()

同样对于这种情况,sync/errgroup 使用起来更方便:

var g errgroup.Group

g.Go(func() error {
    return r.db.Raw("SELECT COUNT(*) FROM deposits").Find(&users).Error
})
g.Go(func() error {
    return r.db.Raw("SELECT COUNT(*) FROM services").Find(&services).Error
})

if err := g.Wait(); err == nil {
  return &models.MyModel{}, fmt.Errorf(queryResponse.Error)
}

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《可以在 goroutine 中使用 sqlmock 进行查询测试吗?》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>