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
Linda Hamiltonasal
2025-01-02 19:24:50578semak imbas

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)
    }
}

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()
    }
}

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!

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