首頁  >  文章  >  後端開發  >  儘管文字相同,為什麼 sqlmock 無法匹配我的查詢?

儘管文字相同,為什麼 sqlmock 無法匹配我的查詢?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-10 19:00:04630瀏覽

Why Is sqlmock Failing to Match My Query Despite Identical Text?

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中文網其他相關文章!

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