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