Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menguji Pengendali Pelayan HTTP dengan Permintaan Langsung dalam Go?
Menguji Pelayan HTTP dengan Permintaan Langsung dalam Go
Isu yang dihadapi melibatkan memastikan fungsi pengendali HTTP bertindak balas dengan betul kepada pelbagai kaedah permintaan HTTP (GET dan POST) dalam senario pelayan langsung. Ini memerlukan ujian pengendali dalam konteks pelayan sebenar, dan bukannya bergantung semata-mata pada ujian unit.
Untuk mencapainya, jenis net/http/httptest.Server menyediakan penyelesaian. Ia membolehkan penciptaan pelayan langsung yang menggunakan penghala tertentu. Penghala boleh berdasarkan Gorilla mux (seperti yang dinyatakan dalam soalan), ServeMux net/http atau sebarang pelaksanaan lain yang memuaskan antara muka Pengendali net/http.
Berikut ialah contoh cara menyediakan pelayan langsung menggunakan httptest.Server:
<code class="go">import ( "io" "net/http" "net/http/httptest" "testing" ) func TestIndex(t *testing.T) { // Create a server using the router initialized outside the test function. ts := httptest.NewServer(router) defer ts.Close() // Create a function to generate a request with the desired method and URL. 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 } // Define test cases with various requests. 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)}, // Note: POST requests require a reader in the body } // Run tests with live requests to the server. 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 in the live server's response here. }) } }</code>
Dalam contoh ini, penghala diandaikan dimulakan di luar fungsi ujian. httptest.Server kemudiannya dibuat menggunakan penghala dan ditutup apabila ujian selesai. Fungsi newreq digunakan untuk menjana permintaan dengan kaedah dan URL tertentu. Kes ujian ditakrifkan sebagai kepingan struct untuk memudahkan lelaran yang mudah.
Dengan menghantar permintaan langsung ke pelayan menggunakan http.DefaultClient.Do(), kami boleh mengesahkan kelakuan fungsi pengendali dalam konteks pelayan langsung. Ini menyediakan pendekatan ujian yang lebih komprehensif berbanding ujian unit terpencil.
Perhatikan bahawa pendekatan dan butiran dalam jawapan ini boleh digunakan untuk mana-mana penghala yang melaksanakan antara muka http.Handler, bukan hanya Gorilla mux.
Atas ialah kandungan terperinci Bagaimana untuk Menguji Pengendali Pelayan HTTP dengan Permintaan Langsung dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!