Bagaimanakah saya boleh melakukan ujian langsung pelayan HTTP dalam Go?

Susan Sarandon
Lepaskan: 2024-11-02 07:55:02
asal
131 orang telah melayarinya

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!