ホームページ > バックエンド開発 > Golang > SQLMock クエリが一致しないのはなぜですか?

SQLMock クエリが一致しないのはなぜですか?

Patricia Arquette
リリース: 2024-11-10 07:39:02
オリジナル
754 人が閲覧しました

Why Isn't My SQLMock Query Matching?

SQLMock クエリのマッチングの問題のトラブルシューティング

SQLMock を使用してクエリを模擬する場合、一致するはずのクエリが、表示されているにもかかわらず一致しないという状況が発生することがあります。ログ出力でも同じです。この記事では、この不一致の一般的な理由について説明し、解決策を示します。

クエリが一致しないのはなぜですか?

最初のステップは、クエリが予想されるクエリと実際に同一であることを確認することです。ただし、構文や引数の処理の微妙な違いによって不一致が生じる可能性があります。

解決策: Regexp.QuoteMeta()

クエリで特殊文字を使用すると、よくある問題が 1 つ発生します。 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 ステートメントではなく、update または insert ステートメントを想定しているためです。 select ステートメントの場合は、代わりに ExpectQuery() を使用してください。

mock.ExpectQuery(`SELECT \* FROM "storage_pools"`).
    WithArgs(c.givenPool.PoolId).WillReturnResult(sqlmock.NewResult(1, 1))
ログイン後にコピー

追加の考慮事項

  • ExpectQuery() または ExpectExec() メソッドに渡す引数が引数と一致していることを確認してください。実際のクエリで。
  • QueryMatcherOption などの SQLMock 構成オプションが設定されていることを確認してください。
  • 断続的な不一致が発生した場合は、sqlmock.QueryMatcherEqual などのクエリ マッチャーに別の SQLMock 構成オプションを使用してみてください。

以上がSQLMock クエリが一致しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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