ホームページ  >  記事  >  バックエンド開発  >  httptest を使用して Go で応答本文を読み取るときにエラーをシミュレートする方法は?

httptest を使用して Go で応答本文を読み取るときにエラーをシミュレートする方法は?

DDD
DDDオリジナル
2024-10-27 05:54:29500ブラウズ

How to Simulate an Error While Reading the Response Body in Go with httptest?

Go で応答本文の読み取りエラーをシミュレートする方法

はじめに:

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。