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中文网其他相关文章!