入力とログ出力が同じであるにもかかわらず、Sqlmock がクエリと一致しないのはなぜですか?

Mary-Kate Olsen
リリース: 2024-11-11 00:57:03
オリジナル
753 人が閲覧しました

Why Is My Sqlmock Not Matching My Query Despite Identical Input and Log Output?

入力とログ出力が同一であるにもかかわらず、Sqlmock がクエリと一致しない

クエリの不一致の問題

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート