簡體   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