簡介:
徹底測試HTTP 客戶端包裝器至關重要以確保其穩健性。測試的一方面涉及在讀取回應正文時模擬錯誤。在 Go 中,常用的 http.Client 和 httpClient.Get 函數可用於傳送 HTTP 請求,但了解如何使用 httptest 讀取回應正文期間強制出錯非常重要。
模擬錯誤在回應正文讀取中:
要在讀取回應正文時強制出錯,需要修改測試中使用的假伺服器的 ResponseWriter。預設情況下,httptest.NewServer 會建立一個發送有效 HTTP 回應的假伺服器。
修改ResponseWriter 以引發錯誤:
參考Response.Body 文件,一可以確定如果網路連線失敗或伺服器終止回應,則從中讀取可能會傳回錯誤。若要模擬此錯誤,可以從測試處理程序產生無效的 HTTP 回應。
範例:
產生無效回應的簡單方法是提供不正確的回應Content-Length header:
handler := func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Length", "1") }
在此範例中,處理程序聲明回應的正文為一字節,但不傳送任何內容。因此,當客戶端嘗試從回應正文中讀取位元組時,它會遇到意外的檔案結束錯誤:
Unable to read from body unexpected EOF
結論:
By修改測試處理程序中的Content-Length 標頭,可以在回應正文讀取期間模擬錯誤,從而允許在Go 中徹底測試HTTP 用戶端包裝器。
以上是如何在 Go 中使用 httptest 讀取回應正文時模擬錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!