Bagaimana untuk Mensimulasikan Ralat Baca Badan Respons dengan httptest?

Patricia Arquette
Lepaskan: 2024-10-27 01:05:30
asal
413 orang telah melayarinya

How to Simulate Response Body Read Errors with httptest?

Mensimulasikan Ralat pada Badan Respons Baca dengan httptest

Apabila menguji klien HTTP dengan httptest, mungkin terdapat keperluan untuk mensimulasikan ralat semasa badan respons baca.

Pertimbangkan fungsi pembungkus berikut yang menggunakan badan tindak balas:

<code class="go">package req

func GetContent(url string) ([]byte, error) {
    response, err := httpClient.Get(url)
    // some header validation goes here
    body, err := ioutil.ReadAll(response.Body)
    defer response.Body.Close()

    if err != nil {
        errStr := fmt.Sprintf("Unable to read from body %s", err)
        return nil, errors.New(errStr)
    }

    return body, nil
}</code>
Salin selepas log masuk

Untuk menguji fungsi ini, pelayan palsu boleh disediakan menggunakan httptest:

<code class="go">package req_test

import (
    "net/http"
    "net/http/httptest"
    "testing"
)

func Test_GetContent_RequestBodyReadError(t *testing.T) {

    handler := func(w http.ResponseWriter, r *http.Request) {
        w.WriteHeader(http.StatusOK)
    }

    ts := httptest.NewServer(http.HandlerFunc(handler))
    defer ts.Close()

    _, err := GetContent(ts.URL)

    if err != nil {
        t.Log("Body read failed as expected.")
    } else {
        t.Fatalf("Method did not fail as expected")
    }

}</code>
Salin selepas log masuk

Untuk memaksa ralat baca, adalah penting untuk memahami gelagat Response.Body daripada dokumentasi:

// Body represents the response body.
//
// ...
// If the network connection fails or the server terminates the response, Body.Read calls return an error.
Salin selepas log masuk

Oleh itu, cara mudah untuk mensimulasikan ralat adalah dengan mencipta respons HTTP yang tidak sah daripada pengendali ujian . Contohnya, pembohongan tentang panjang kandungan boleh menyebabkan ralat EOF yang tidak dijangka pada pihak pelanggan.

Contoh pengendali sedemikian:

<code class="go">handler := func(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Length", "1")
}</code>
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Mensimulasikan Ralat Baca Badan Respons dengan httptest?. 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!