ホームページ >バックエンド開発 >Golang >「httptest」を使用して Go で HTTP 呼び出しを効果的にテストするにはどうすればよいですか?

「httptest」を使用して Go で HTTP 呼び出しを効果的にテストするにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-15 08:15:15566ブラウズ

How to Effectively Test HTTP Calls in Go using `httptest`?

httptest を使用して Go で HTTP 呼び出しをテストする方法

概要

Go での HTTP テストhttptest パッケージを使用すると簡単に実行できます。この記事では、サーバー テストの詳細な例を含め、応答およびサーバー テストに httptest を活用する方法について説明します。

テストの種類

httptest は、次の 2 つのカテゴリのテストを提供します。

  • レスポンス テスト: から受信した HTTP レスポンスを検証します。 request.
  • サーバー テスト: サーバーをエミュレートして、テスト対象のアプリケーションとの HTTP 対話をテストします。

応答テスト

応答テストでは、Recorder オブジェクトが応答とその内容をキャプチャします。次のコード スニペットは、応答テストを示しています:

resp := httptest.NewRecorder()
req, _ := http.NewRequest("GET", "/3D/header/?", nil)

http.DefaultServeMux.ServeHTTP(resp, req)

サーバー テスト

サーバー テストの場合、httptest はサーバーをシミュレートし、使用できる URL を提供します。

ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, `{"fake twitter json string"}`)
}))

この例では、事前定義された JSON データで応答するサーバーが作成されます。このサーバーの URL は、テスト対象のアプリケーションで使用できます。

例:retrieveTweets での HTTP 呼び出しのテスト

retrieveTweets 関数をテストするには:

func TestIt(t *testing.T){
    ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintln(w, `{"fake twitter json string"}`)
    }))
    defer ts.Close()

    twitterUrl = ts.URL
    c := make(chan *twitterResult)
    go retrieveTweets(c)

    tweet := <-c
    if tweet != expected1 {
        t.Fail()
    }
    tweet = <-c
    if tweet != expected2 {
        t.Fail()
    }
}

サーバーをモックすることで、retrieveTweets 関数で受信した結果を検証できます。

以上が「httptest」を使用して Go で HTTP 呼び出しを効果的にテストするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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