Ujian Langsung Pelayan HTTP dalam Go
Apabila unit menguji pengendali HTTP, adalah penting untuk memastikan mereka bertindak balas dengan tepat kepada kaedah permintaan yang berbeza. Ujian unit selalunya tidak menggambarkan tingkah laku sebenar pelayan apabila digunakan dengan penghala seperti Gorilla mux. Untuk ujian menyeluruh, versi "pelayan langsung" diperlukan.
Penyelesaian: Menggunakan httptest.Server
Jenis net/http/httptest.Server menyediakan cara yang mudah untuk mencipta pelayan langsung untuk ujian. Ia memerlukan Pengendali sebagai input, yang boleh menjadi penghala, ServeMux, atau sebarang jenis yang melaksanakan antara muka Pengendali. Kod berikut menunjukkan penggunaannya:
<code class="go">import ( "io" "net/http" "net/http/httptest" "testing" ) func TestIndex(t *testing.T) { // Initialize the router as you would in a production environment. router := mux.NewRouter() router.HandleFunc("/", views.Index).Methods("GET") // Create a live server using the router. ts := httptest.NewServer(router) defer ts.Close() // Define a function to create requests for different methods and URLs. 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)}, // body 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 any additional checks on the response. }) } }</code>
Pendekatan ini membolehkan anda menguji keseluruhan saluran paip pengendalian permintaan, termasuk fungsi penghala dan pengendali. Ia memastikan bahawa pengendali bertindak balas dengan betul kepada kaedah HTTP yang berbeza dan menghasilkan hasil yang diharapkan dalam persekitaran pelayan langsung.
Atas ialah kandungan terperinci Bagaimanakah saya boleh melakukan ujian langsung pelayan HTTP dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!