Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mensimulasikan Ralat Baca Badan Respons dengan httptest?

Bagaimana untuk Mensimulasikan Ralat Baca Badan Respons dengan httptest?

Patricia Arquette
Patricia Arquetteasal
2024-10-27 01:05:30485semak imbas

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>

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>

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.

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>

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!

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