當嘗試使用sqlmock 為Gorm 函數編寫測試時
當嘗試使用sqlmock 為Gorm 函數編寫測試時
mock.ExpectQuery(regexp.QuoteMeta(`SELECT * FROM "storage_pools" WHERE "storage_pools"."deleted_at" IS NULL AND ((poolid = ?)) ORDER BY "storage_pools"."id" ASC LIMIT 1`))當嘗試使用sqlmock 為Gorm 函數編寫測試時當嘗試使用sqlmock 為Gorm 函數編寫測試時當嘗試使用sqlmock 為Gorm 函數編寫測試時當嘗試使用sqlmock ,您可能會遇到sqlmock 無法匹配您的SQL 查詢的問題,即使日誌輸出顯示相同的查詢也是如此。使用 ExpectQuery 方法時可能會出現這種不符的情況。
db, mock, err := sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual)) if err != nil { t.Fatal(err) }解決方案要解決此問題,建議在將查詢傳遞給 ExpectQuery 方法之前使用 regexp.QuoteMeta() 轉義查詢。此函數將正確轉義可能導致不匹配的任何特殊字元。更新後的程式碼如下所示:執行不符問題您可能還會遇到另一個問題,即 sqlmock 與您的 SELECT 語句不符。這是因為 Gorm 由於某些原因正在執行多個 SELECT 語句。第一個語句會找到該行,但第二個語句不會。 要解決此問題,您可以將 QueryMatcherOption(sqlmock.QueryMatcherEqual) 與 ExpectQuery 結合使用,強制 sqlmock 使用精確的字串匹配而不是它的字串匹配預設模糊匹配演算法。
以上是儘管輸入和日誌輸出相同,為什麼我的 Sqlmock 與我的查詢不符?的詳細內容。更多資訊請關注PHP中文網其他相關文章!