Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Pakej `httptest` Go Boleh Memudahkan Ujian Komprehensif Pengendali dan Pelayan HTTP?

Bagaimanakah Pakej `httptest` Go Boleh Memudahkan Ujian Komprehensif Pengendali dan Pelayan HTTP?

Linda Hamilton
Lepaskan: 2025-01-02 19:24:50
asal
581 orang telah melayarinya

How Can Go's `httptest` Package Facilitate Comprehensive Testing of HTTP Handlers and Servers?

Menguji Panggilan HTTP dalam Go dengan httptest

Pakej httptest dalam Go membolehkan ujian menyeluruh terhadap pengendali HTTP, pelayan dan badan tindak balas. Ia menawarkan dua kategori ujian utama: ujian respons dan ujian pelayan.

Ujian Respons

Ujian respons mengesahkan kandungan khusus respons HTTP. Berikut ialah contoh:

func TestHeader3D(t *testing.T) {
    resp := httptest.NewRecorder()

    // Create a request with specified parameters.
    param := make(url.Values)
    param["param1"] = []string{"/home/test"}
    param["param2"] = []string{"997225821"}

    req, err := http.NewRequest("GET", "/3D/header/?"+param.Encode(), nil)
    if err != nil {
        t.Fatal(err)
    }

    // Send the request to the default HTTP server.
    http.DefaultServeMux.ServeHTTP(resp, req)

    // Read the response body.
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        t.Fail()
    }

    // Check the response body for expected content.
    if strings.Contains(string(body), "Error") {
        t.Errorf("header response shouldn't return error: %s", body)
    } else if !strings.Contains(string(body), `expected result`) {
        t.Errorf("header response doen't match:\n%s", body)
    }
}
Salin selepas log masuk

Ujian Pelayan

Ujian pelayan melibatkan penyediaan pelayan HTTP dan membuat permintaan kepadanya. Ini amat berguna untuk menguji pengendali HTTP tersuai dan tingkah laku pelayan. Mari lihat contoh:

func TestIt(t *testing.T) {
    // Create an HTTP server with a mock handler.
    ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        w.Header().Set("Content-Type", "application/json")
        fmt.Fprintln(w, `{"fake twitter json string"}`)
    }))
    defer ts.Close()

    // Update the Twitter URL with the mock server's URL and retrieve a channel for results.
    twitterUrl = ts.URL
    c := make(chan *twitterResult)
    go retrieveTweets(c)

    // Receive and verify the results.
    tweet := <-c
    if tweet != expected1 {
        t.Fail()
    }
    tweet = <-c
    if tweet != expected2 {
        t.Fail()
    }
}
Salin selepas log masuk

Dalam kod yang disediakan, terdapat penggunaan penuding kepada r (penerima) yang tidak perlu dalam err = json.Unmarshal(body, &r), kerana r sudah pun menjadi penunjuk . Sehubungan itu, ia harus dibetulkan kepada err = json.Unmarshal(body, r).

Atas ialah kandungan terperinci Bagaimanakah Pakej `httptest` Go Boleh Memudahkan Ujian Komprehensif Pengendali dan Pelayan HTTP?. 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