はじめに:
HTTP クライアント ラッパーを徹底的にテストすることが重要です堅牢性を確保するために。テストの 1 つの側面には、応答本文の読み取り中にエラーをシミュレートすることが含まれます。 Go では、一般的に使用される http.Client 関数と httpClient.Get 関数を使用して HTTP リクエストを送信できますが、httptest を使用して応答本文の読み取り中にエラーを強制する方法を理解することが重要です。
エラーのシミュレーション応答本文の読み取り:
応答本文の読み取り中に強制的にエラーを発生させるには、テストで使用される偽のサーバーの ResponseWriter を変更する必要があります。デフォルトでは、httptest.NewServer は有効な HTTP 応答を送信する偽のサーバーを作成します。
エラーを誘発するための ResponseWriter の変更:
Response.Body ドキュメントを参照してください。ネットワーク接続が失敗した場合、またはサーバーが応答を終了した場合に、読み取りがエラーを返す可能性があることを判断できます。このエラーをシミュレートするには、テスト ハンドラーから無効な HTTP 応答を生成できます。
例:
無効な応答を生成する簡単な方法は、正しくない応答を提供することです。 Content-Length ヘッダー:
handler := func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Length", "1") }
この例では、ハンドラーは応答の本文が 1 バイトであることを宣言しますが、コンテンツは送信しません。その結果、クライアントが応答本文からバイトを読み取ろうとすると、予期しないファイル終了エラーが発生します:
Unable to read from body unexpected EOF
結論:
Byテスト ハンドラーで Content-Length ヘッダーを変更すると、応答本文の読み取り中のエラーをシミュレートできるため、Go で HTTP クライアント ラッパーを徹底的にテストできます。
以上がhttptest を使用して Go で応答本文を読み取るときにエラーをシミュレートする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。