首頁 > 後端開發 > Golang > 為什麼我的 SQLMock 查詢不符?

為什麼我的 SQLMock 查詢不符?

Patricia Arquette
發布: 2024-11-10 07:39:02
原創
754 人瀏覽過

Why Isn't My SQLMock Query Matching?

排查SQLMock 查詢匹配問題

使用SQLMock 模擬查詢時,您可能會遇到希望匹配的查詢沒有匹配到的情況,儘管出現了日誌輸出中相同。本文將討論這種不匹配的常見原因並提供解決方案。

為什麼沒有查詢匹配?

第一步是驗證您的查詢確實與預期查詢相同。但是,語法或參數處理方面的細微差異可能會導致不匹配。

解決方案:Regexp.QuoteMeta()

在查詢中使用特殊字元時會出現一個常見問題。 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 語句間歇性不符

您提到 select 語句不是與 ExpectExec() 一起使用。這是因為 ExpectExec() 需要更新或插入語句,而不是選擇語句。對於 select 語句,請使用 ExpectQuery()。

mock.ExpectQuery(`SELECT \* FROM "storage_pools"`).
    WithArgs(c.givenPool.PoolId).WillReturnResult(sqlmock.NewResult(1, 1))
登入後複製

其他注意事項

  • 確保傳遞給 ExpectQuery() 或 ExpectExec() 方法的參數與參數匹配在實際查詢中。
  • 檢查 SQLMock 設定選項(例如 QueryMatcherOption)是否設定正確。
  • 如果遇到間歇性不匹配,請嘗試為查詢匹配器使用不同的 SQLMock 配置選項,例如 sqlmock.QueryMatcherEqual.

以上是為什麼我的 SQLMock 查詢不符?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板