Pelayan HTTP Ujian Langsung dalam Go
Soalan:
Bagaimana saya boleh melakukan ujian langsung pengendali pelayan HTTP, memastikan bahawa mereka bertindak balas dengan betul kepada kaedah permintaan HTTP tertentu dalam konteks penghala lengkap?
Jawapan:
Untuk menjalankan ujian langsung bagi pelayan HTTP, gunakan jenis net/http/httptest.Server. Pendekatan ini melibatkan mencipta pelayan ujian langsung yang menggunakan penghala yang dipersoalkan. Selepas itu, anda boleh menghantar permintaan HTTP ke pelayan ujian ini dan mengesahkan respons terhadap keputusan yang dijangkakan.
Contoh Kod:
Kod berikut menunjukkan cara menggunakan httptest .Pelayan untuk ujian langsung:
<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>
Nota: Pendekatan ini terpakai kepada mana-mana penghala yang melaksanakan antara muka http.Handler, termasuk Gorilla mux, net/http.ServeMux dan http. DefaultServeMux.
Atas ialah kandungan terperinci Bagaimana Menguji secara Langsung Pengendali Pelayan HTTP dengan Penghala Penuh dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!