首页  >  文章  >  后端开发  >  尽管文本相同,为什么 sqlmock 无法匹配我的查询?

尽管文本相同,为什么 sqlmock 无法匹配我的查询?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-10 19:00:04621浏览

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