2
我正在爲golang中的http Handlers編寫單元測試。查看代碼覆蓋率報告時,我遇到了以下問題:從請求中讀取請求正文時,ioutil.ReadAll
可能會返回我需要處理的錯誤。然而,當我爲我的處理程序編寫單元測試時,我不知道如何發送請求給我的處理程序,以便它會觸發這樣的錯誤(內容的提前結束似乎不會產生這樣的錯誤,但會產生錯誤解組身體)。這就是我要做的:如何在從請求主體讀取時測試錯誤?
package demo
import (
"bytes"
"io/ioutil"
"net/http"
"net/http/httptest"
"testing"
)
func HandlePostRequest(w http.ResponseWriter, r *http.Request) {
body, bytesErr := ioutil.ReadAll(r.Body)
if bytesErr != nil {
// intricate logic goes here, how can i test it?
http.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest)
return
}
defer r.Body.Close()
// continue...
}
func TestHandlePostRequest(t *testing.T) {
ts := httptest.NewServer(http.HandlerFunc(HandlePostRequest))
data, _ := ioutil.ReadFile("testdata/fixture.json")
res, err := http.Post(ts.URL, "application/json", bytes.NewReader(data))
// continue...
}
我怎麼能寫HandlePostRequest
一個測試用例還包括bytesErr
不是nil
的情況下?
很好的答案,正是我所期待的。 return語句存在於我的真實代碼中,但感謝無論如何陳述它,我會將其添加到該問題中以避免其他人混淆。 – m90