Pengenalan:
Menguji pembungkus klien HTTP secara menyeluruh adalah penting untuk memastikan keteguhan mereka. Satu aspek ujian melibatkan simulasi ralat semasa membaca badan tindak balas. Dalam Go, fungsi http.Client dan httpClient.Get yang biasa digunakan boleh digunakan untuk menghantar permintaan HTTP, tetapi penting untuk memahami cara memaksa ralat semasa membaca badan respons menggunakan httptest.
Simulasi Ralat dalam Bacaan Badan Respons:
Untuk memaksa ralat semasa membaca badan respons, seseorang perlu mengubah suai ResponseWriter pelayan palsu yang digunakan dalam ujian. Secara lalai, httptest.NewServer mencipta pelayan palsu yang menghantar respons HTTP yang sah.
Mengubah suai ResponseWriter untuk Mengakibatkan Ralat:
Merujuk dokumentasi Response.Body, satu boleh menentukan bahawa bacaan daripadanya mungkin mengembalikan ralat jika sambungan rangkaian gagal atau pelayan menamatkan respons. Untuk mensimulasikan ralat ini, seseorang boleh menjana respons HTTP yang tidak sah daripada pengendali ujian.
Contoh:
Cara mudah untuk menjana respons tidak sah adalah dengan memberikan jawapan yang salah Pengepala Panjang Kandungan:
handler := func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Length", "1") }
Dalam contoh ini, pengendali mengisytiharkan bahawa respons mempunyai kandungan satu bait, tetapi tidak menghantar sebarang kandungan. Akibatnya, apabila pelanggan cuba membaca bait daripada badan respons, ia menghadapi ralat akhir fail yang tidak dijangka:
Unable to read from body unexpected EOF
Kesimpulan:
Oleh mengubah suai pengepala Panjang Kandungan dalam pengendali ujian, adalah mungkin untuk mensimulasikan ralat semasa bacaan isi respons, membolehkan ujian menyeluruh pembungkus klien HTTP dalam Go.
Atas ialah kandungan terperinci Bagaimana untuk Mensimulasikan Ralat Semasa Membaca Badan Respons dalam Go dengan httptest?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!