Rumah >pembangunan bahagian belakang >Golang >Bagaimana Menguji secara Langsung Pengendali Pelayan HTTP dengan Penghala Penuh dalam Go?

Bagaimana Menguji secara Langsung Pengendali Pelayan HTTP dengan Penghala Penuh dalam Go?

Barbara Streisand
Barbara Streisandasal
2024-11-03 04:59:30261semak imbas

How to Live Test HTTP Server Handlers with a Full-Fledged Router in Go?

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!

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