繁体   English   中英

如何使用 sqlmock 模拟 Go 中的表计数查询(GORM HasTable)?

[英]How do I use sqlmock to mock a table count query (GORM HasTable) in Go?

我正在使用sqlmock对一组 Go 中编写的 Mysql 数据库查询处理程序进行单元测试。这非常适合标准SELECT / INSERT查询。 对于我们的数据库健康检查,我使用 GORM 的DB.Migrator().HasTable()来确保我们的数据库中存在特定的表。 该功能似乎工作正常,但我遇到了困难 mocking 在HasTable()的引擎盖下发生的查询。 有人对如何使用sqlmock执行此操作有任何建议吗?

HasTable()正在执行以下查询: SELECT count(*) FROM information_schema.tables WHERE table_schema = '' AND table_name = '[table_name]' AND table_type = 'BASE TABLE'

我的测试助手 function 如下所示:

    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()的所有组合,以及我能想到的所有它们的方法。 有任何想法吗?

使用sqlmock.QueryMatcherEqual可以避免*解析问题

sqlDB, mock, err := sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM