sqlmock 不符查詢,儘管有相同的文字
遇到錯誤訊息:
could not match actual sql: "SELECT * FROM "storage_pools" WHERE "storage_pools"."deleted_at" IS NULL AND ((poolid = ?)) ORDER BY "storage_pools"."id" ASC LIMIT 1" with expected regexp "SELECT * FROM "storage_pools" WHERE "storage_pools"."deleted_at" IS NULL AND ((poolid = ?)) ORDER BY "storage_pools"."id" ASC LIMIT 1"
使用sqlmock時戈爾姆可能會令人沮喪。儘管日誌輸出顯示相同的查詢,但匹配失敗。
這裡的根本問題是 SQL 文字和 SQL 語法之間的差異。雖然查詢文字看起來相同,但小的語法變更可能會導致問題。若要解決此問題,請確保模擬中的預期查詢字串與正在執行的查詢的文字文字相符。
一個可能的解決方案是使用regexp.QuoteMeta() 函數轉義預期查詢中的任何元字元:
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`))
透過將查詢文字括在文字引號中,regexp .QuoteMeta() 確保處理字串中的任何特殊字元或元字元從字面上看,防止他們幹擾匹配過程。這應該可以解決問題並允許 sqlmock 正確匹配查詢。
以上是儘管文字相同,為什麼 sqlmock 無法匹配我的查詢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!