ホームページ > バックエンド開発 > Golang > Go の本格的なルーターを使用して HTTP サーバー ハンドラーをライブ テストするにはどうすればよいですか?

Go の本格的なルーターを使用して HTTP サーバー ハンドラーをライブ テストするにはどうすればよいですか?

Barbara Streisand
リリース: 2024-11-03 04:59:30
オリジナル
213 人が閲覧しました

How to Live Test HTTP Server Handlers with a Full-Fledged Router in Go?

Go での HTTP サーバーのライブ テスト

質問:

ライブ テストを実行するにはどうすればよいですか? HTTP サーバー ハンドラーのテストを実行し、本格的なルーターのコンテキスト内で特定の HTTP リクエスト メソッドに正しく応答することを確認しますか?

回答:

ライブ テストを実施するにはHTTP サーバーの場合は、net/http/httptest.Server タイプを使用します。このアプローチには、問題のルーターを利用するライブ テスト サーバーの作成が含まれます。その後、このテスト サーバーに HTTP リクエストを送信し、予想される結果に対してレスポンスを検証できます。

コード例:

次のコードは、httptest の使用方法を示しています。ライブ テスト用のサーバー:

<code class="go">import (
    "net/http"
    "net/http/httptest"
    "testing"
)

func TestIndex(t *testing.T) {
    // Initialize the router, e.g., a Gorilla mux router as in the question.
    router := mux.NewRouter()
    router.HandleFunc("/", views.Index).Methods("GET")

    // Create a test server using the router.
    ts := httptest.NewServer(router)
    defer ts.Close()

    // Define a function to construct new HTTP requests.
    newreq := func(method, url string, body io.Reader) *http.Request {
        r, err := http.NewRequest(method, url, body)
        if err != nil {
            t.Fatal(err)
        }
        return r
    }

    tests := []struct {
        name string
        r    *http.Request
    }{
        {name: "1: testing get", r: newreq("GET", ts.URL+"/", nil)},
        {name: "2: testing post", r: newreq("POST", ts.URL+"/", nil)}, // reader argument required for POST
    }

    for _, tt := range tests {
        t.Run(tt.name, func(t *testing.T) {
            resp, err := http.DefaultClient.Do(tt.r)
            defer resp.Body.Close()
            if err != nil {
                t.Fatal(err)
            }

            // Perform validations on the response body, headers, etc.
        })
    }
}</code>
ログイン後にコピー

注: このアプローチは、Gorilla mux、net/http.ServeMux、http など、http.Handler インターフェイスを実装するルーターに適用できます。 DefaultServeMux.

以上がGo の本格的なルーターを使用して HTTP サーバー ハンドラーをライブ テストするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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