httptest を使用して Go で HTTP 呼び出しをテストする方法
Go では、httptest パッケージを使用して HTTP 呼び出しをテストする便利な方法が提供されます。アプリケーションの HTTP 機能を徹底的に検査するために、レスポンス テストとサーバー テストの両方が提供されます。
レスポンス テスト
レスポンス テストは、レスポンス自体の検証に重点を置いています。たとえば、応答のステータス コード、ヘッダー、コンテンツを確認できます。以下に例を示します。
func TestHeader3D(t *testing.T) { resp := httptest.NewRecorder() // ... setup the request with headers and parameters ... http.DefaultServeMux.ServeHTTP(resp, req) // ... assert the response body and content type ... }
サーバー テスト
サーバー テストでは、対照的に、ルートやハンドラーを含む HTTP サーバー全体をテストできます。このアプローチは、アプリケーションを介したリクエストのフローをテストする場合に役立ちます。 httptest.NewServer() メソッドを使用した例を次に示します。
func TestIt(t *testing.T) { ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // ... your handler setup and response ... })) defer ts.Close() // ... setup your requests and make assertions based on the responses ... }
特定のケースでは、サーバー テストを利用して、予測可能な応答で Twitter 検索 API を模擬できます。これにより、実際の HTTP 呼び出しを行わずに関数をテストできます。
func TestRetrieveTweets(t *testing.T) { ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // Set up your mock response for the Twitter API ... })) defer ts.Close() twitterUrl = ts.URL c := make(chan *twitterResult) go retrieveTweets(c) // ... assert the results you receive in the `c` channel ... }
retrieveTweets 関数の r パラメーターはすでにポインターであるため、json.Unmarshal 内でポインターとして渡す必要がないことに注意してください。 .
以上が`httptest` パッケージを使用して Go で HTTP 呼び出しを効果的にテストするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。