Go でのライブ リクエストによる HTTP サーバーのテスト
ハンドラーの単体テストは不可欠ですが、ルーティングや他のミドルウェアの影響を見落とす可能性があります。包括的なテストの場合は、「ライブ サーバー」アプローチの使用を検討してください。
httptest.Server を使用したライブ サーバー テスト
net/http/httptest.Server タイプにより、ライブが容易になります。サーバーのテスト。提供されたハンドラー (この場合は、Gorilla mux ルーター) を使用してサーバーを作成します。以下に例を示します。
func TestIndex(t *testing.T) {
// Create server using the router initialized elsewhere.
ts := httptest.NewServer(router)
defer ts.Close()
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
}{
// Test GET and POST requests.
{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)
}
// check for expected response here.
})
}
}
httptest.Server は、Gorilla mux だけでなく、http.Handler インターフェイスを満たす任意のハンドラーをテストするために使用できることに注意してください。
考慮事項
ライブ サーバー テストはより現実的なテストを提供しますが、単体テストよりも時間がかかり、リソースを大量に消費する可能性があります。包括的なテスト戦略のために、単体テストと統合テストの組み合わせを検討してください。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3