【问题标题】:How to use go-sqlmock when I have concurrent query in my program?当我的程序中有并发查询时如何使用 go-sqlmock?
【发布时间】:2021-06-13 16:20:41
【问题描述】:

sqlmock需要按顺序匹配SQL。但是,如果我的代码中有这样的并发查询:

    condition1 := make(map[string]string)
    condition2 := make(map[string]string)

    var count int64
    var user User
    var task Task

    var wg sync.WaitGroup
    wg.Add(3)

    wgDone := make(chan interface{})
    errCh := make(chan error)

    go func(wg *sync.WaitGroup) {
        defer wg.Done()

        err := conn.Where(condition1).Find(&user).Error
        if err != nil {
            errCh <- err
        }
    }(&wg)

    go func(wg *sync.WaitGroup) {
        defer wg.Done()

        err := conn.Where(condition2).Find(&task).Error
        if err != nil {
            errCh <- err
        }
    }(&wg)

    go func(wg *sync.WaitGroup) {
        defer wg.Done()

        err := conn.Count(&count).Error
        if err != nil {
            errCh <- err
        }
    }(&wg)
    
    go func() {
        wg.Wait()
        close(wgDone)
    }()

    select {
    case err := <-errCh:
        return err
    case <-wgDone:
        break
    }
    
    ...

据说我们无法知道SQL的执行顺序。所以不知道怎么用sqlmock正确匹配sql。

【问题讨论】:

    标签: unit-testing go go-sqlmock


    【解决方案1】:

    MatchExpectationsInOrder 方法会针对这种情况禁用按顺序检查。

    【讨论】:

      猜你喜欢
      • 2021-01-04
      • 2020-01-28
      • 1970-01-01
      • 2021-11-21
      • 2020-07-09
      • 2013-06-24
      • 2020-01-03
      • 2013-11-13
      • 2012-01-04
      相关资源
      最近更新 更多