mysql 如何在Go语言中使用sqlmock来模拟表计数查询(GORM HasTable)?

46qrfjad  于 2022-11-28  发布在  Mysql
关注(0)|答案(1)|浏览(124)

我正在使用sqlmock对一组用Go语言编写的Mysql数据库查询处理程序进行单元测试。这对于标准的SELECT/INSERT查询非常有效。对于我们的数据库健康检查,我正在使用GORM的DB.Migrator().HasTable()来确保一个特定的表存在于我们的数据库中。功能似乎工作正常,但是我很难模拟在HasTable()的引擎盖下发生的查询,有人对如何使用sqlmock来实现这一点有什么建议吗?
HasTable()正在执行下列查询:SELECT count(*) FROM information_schema.tables WHERE table_schema = '' AND table_name = '[table_name]' AND table_type = 'BASE TABLE'
我的测试助手函数如下所示:

sqlDB, mock, err := sqlmock.New()
    if err != nil {
        log.Panicln(err)
    }

    // This is the block I'm not sure about...
    mock.ExpectBegin()
    mock.ExpectQuery(regexp.QuoteMeta("SELECT count(*) FROM information_schema.tables WHERE table_schema = '' AND table_name = '[table_name]' AND table_type = 'BASE TABLE'")).
        WillReturnRows(sqlmock.NewRows([]string{"count(*)"}).
            AddRow(1))
    mock.ExpectCommit()

    setupSqlMock(sqlDB)
}

我已经尝试了mock.ExpectExec()mock.ExpectQuery()的每一种组合,以及我能想到的所有方法。有什么想法吗?

4dbbbstv

4dbbbstv1#

使用sqlmock.QueryMatcherEqual可以避免 * 解析问题
查询匹配器选项(查询匹配器相等))

相关问题