ホームページ > バックエンド開発 > Golang > httptest を使用して単体テスト http リクエストを再試行する

httptest を使用して単体テスト http リクエストを再試行する

WBOY
リリース: 2024-02-10 12:30:09
転載
769 人が閲覧しました

使用 httptest 单元测试 http 请求重试

php エディタ Baicao では、開発者が http リクエストを再試行する際のテストに役立つ「httptest」という単体テスト ツールを紹介します。このツールは、さまざまな http リクエストをシミュレートできるだけでなく、コードの安定性と信頼性を確保するためにリクエストを自動的に再試行することもできます。 httptest ツールを使用すると、開発者は http リクエストの単体テストを簡単に行うことができ、ネットワークの不安定性やその他の異常な状況に対処するためにリクエストを簡単に再試行することができます。このツールを使用すると、開発効率が大幅に向上し、エラーの可能性が減少するため、すべての PHP 開発者にとって試してみる価値のあるツールです。

質問の内容

HTTP リクエストをラップし、応答のアンマーシャリングを処理する HttpRequest というコンポーネントの単体テストを作成しようとしています。最近、このコンポーネントに、最初の試行で「接続が拒否されました」エラーが発生した場合に HTTP リクエストを再試行できる機能を追加しました。

HttpRequest コンポーネントを使用するには、これを 1 回呼び出します: user, err := HttpRequest[User](config)。 config パラメータには、URL、メソッド、タイムアウト、再試行回数、リクエスト本文など、リクエストを実行するために必要な情報がすべて含まれています。また、応答本文を指定されたタイプ (この場合は User) のインスタンスにアンマーシャリングします。

最初のリクエストが「接続が拒否されました」エラーで失敗するが、2 回目の試行は成功するというシナリオをテストしようとすると、問題が発生します。再試行はコンポーネント内で行われるため、コンポーネントへの呼び出しは 1 回だけ行います。

この状況で単体テストを作成するのは難しいと思いました。なぜなら、リクエストが「接続が拒否されました」で失敗するためには、呼び出されるポートにリスナーが必要ないからです。問題は、

httptest を使用する場合、httptest.NewUnstartedServer を使用する場合でも、インスタンスの作成時に常にポートをリッスンすることです。したがって、httptest インスタンスを作成した後、クライアント コードで「接続が拒否されました」エラーが発生することはありません。

ただし、

httptest インスタンスを作成するまでは、どのポートでリッスンするかわかりません。 httptest は常にランダムなポートを選択します。プログラムでポートを指定する方法はありません。これは、httptest インスタンスを作成する前に HttpRequest 呼び出しを行うことができないことを意味します。

このシナリオを効果的に単体テストする方法について何かアイデアを持っている人はいますか?

ソリューション

newunstartedserver 非常に簡単: リーリー

適切なポートを選択すると、次のことが可能になります:

リーリー

リスナーを作成するコードは、

httptest.newlocallistener から変更されています。

別のオプションは、

http.roundtripper インターフェイスを実装し、このラウンドトリップを使用して http.client を作成することです。以下は、net/ からコピーされた http/client_test.go の例です。 リーリー

以上がhttptest を使用して単体テスト http リクエストを再試行するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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