Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah saya boleh melakukan ujian langsung pelayan HTTP dalam Go?

Bagaimanakah saya boleh melakukan ujian langsung pelayan HTTP dalam Go?

Susan Sarandon
Susan Sarandonasal
2024-11-02 07:55:02122semak imbas

How can I perform live testing of an HTTP server in Go?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn