sqlmock を使用して Gorm 関数のテストを作成しようとすると、ログ出力には同一のクエリが示されているにもかかわらず、sqlmock が SQL クエリと一致しないという問題が発生する可能性があります。この不一致は、ExpectQuery メソッドを使用するときに発生する可能性があります。
この問題を解決するには、クエリを ExpectQuery メソッドに渡す前に 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`))
また、sqlmock が SELECT ステートメントと一致しないという別の問題が発生する可能性があります。これは、Gorm が何らかの理由で複数の SELECT ステートメントを実行しているためです。最初のステートメントは行を見つけますが、2 番目のステートメントは行を見つけません。
この問題を解決するには、QueryMatcherOption(sqlmock.QueryMatcherEqual) を ExpectQuery と組み合わせて使用し、sqlmock にその行の代わりに正確な文字列一致を使用させることができます。デフォルトのファジーマッチングアルゴリズム。
db, mock, err := sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual)) if err != nil { t.Fatal(err) }
以上が入力とログ出力が同じであるにもかかわらず、Sqlmock がクエリと一致しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。