首页  >  文章  >  后端开发  >  为什么我的 SQLMock 查询不匹配?

为什么我的 SQLMock 查询不匹配?

Patricia Arquette
Patricia Arquette原创
2024-11-10 07:39:02728浏览

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn