Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menguji Panggilan HTTP dengan Berkesan dalam Go Menggunakan Pakej `httptest`?

Bagaimana untuk Menguji Panggilan HTTP dengan Berkesan dalam Go Menggunakan Pakej `httptest`?

Patricia Arquette
Patricia Arquetteasal
2024-12-16 09:25:11661semak imbas

How to Effectively Test HTTP Calls in Go Using the `httptest` Package?

Cara Menguji Panggilan HTTP dalam Go Menggunakan httptest

Dalam Go, pakej httptest menawarkan cara yang mudah untuk menguji panggilan HTTP anda. Ia menyediakan kedua-dua ujian respons dan pelayan untuk pemeriksaan menyeluruh kefungsian HTTP aplikasi anda.

Ujian Respons

Ujian respons memfokuskan pada mengesahkan respons itu sendiri. Sebagai contoh, anda boleh mengesahkan kod status, pengepala dan kandungan respons. Berikut ialah contoh:

func TestHeader3D(t *testing.T) {
    resp := httptest.NewRecorder()
    // ... setup the request with headers and parameters ...
    http.DefaultServeMux.ServeHTTP(resp, req)
    // ... assert the response body and content type ...
}

Ujian Pelayan

Ujian pelayan, sebaliknya, membolehkan anda menguji keseluruhan pelayan HTTP, termasuk laluan dan pengendalinya. Pendekatan ini boleh berguna untuk menguji aliran permintaan melalui aplikasi anda. Berikut ialah contoh menggunakan kaedah httptest.NewServer():

func TestIt(t *testing.T) {
    ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        // ... your handler setup and response ...
    }))
    defer ts.Close()
    // ... setup your requests and make assertions based on the responses ...
}

Dalam kes khusus anda, anda boleh menggunakan ujian pelayan untuk mengejek API carian Twitter dengan respons yang boleh diramal. Ini membolehkan anda menguji fungsi anda tanpa membuat panggilan HTTP sebenar.

func TestRetrieveTweets(t *testing.T) {
    ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        // Set up your mock response for the Twitter API ...
    }))
    defer ts.Close()
    twitterUrl = ts.URL
    c := make(chan *twitterResult)
    go retrieveTweets(c)
    // ... assert the results you receive in the `c` channel ...
}

Ingat bahawa parameter r dalam fungsi retrieveTweets anda sudah pun menjadi penunjuk, jadi tidak perlu menghantarnya sebagai penunjuk dalam json.Unmarshal .

Atas ialah kandungan terperinci Bagaimana untuk Menguji Panggilan HTTP dengan Berkesan dalam Go Menggunakan Pakej `httptest`?. 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