使用SQLMock 模擬查詢時,您可能會遇到希望匹配的查詢沒有匹配到的情況,儘管出現了日誌輸出中相同。本文將討論這種不匹配的常見原因並提供解決方案。
第一步是驗證您的查詢確實與預期查詢相同。但是,語法或參數處理方面的細微差異可能會導致不匹配。
在查詢中使用特殊字元時會出現一個常見問題。 SQLMock 對這些字元的解釋可能與您的程式碼不同。為了確保精確匹配,您可以使用 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`))
這確保所有特殊字元都被視為文字,從而防止不匹配。
您提到 select 語句不是與 ExpectExec() 一起使用。這是因為 ExpectExec() 需要更新或插入語句,而不是選擇語句。對於 select 語句,請使用 ExpectQuery()。
mock.ExpectQuery(`SELECT \* FROM "storage_pools"`). WithArgs(c.givenPool.PoolId).WillReturnResult(sqlmock.NewResult(1, 1))
以上是為什麼我的 SQLMock 查詢不符?的詳細內容。更多資訊請關注PHP中文網其他相關文章!