首頁  >  文章  >  後端開發  >  儘管輸入和日誌輸出相同,為什麼我的 Sqlmock 與我的查詢不符?

儘管輸入和日誌輸出相同,為什麼我的 Sqlmock 與我的查詢不符?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-11 00:57:03748瀏覽

Why Is My Sqlmock Not Matching My Query Despite Identical Input and Log Output?

儘管輸入和日誌輸出相同,Sqlmock 也不匹配查詢

查詢不匹配問題

當嘗試使用sqlmock 為Gorm 函數編寫測試時

當嘗試使用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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn