我正在为golang中的http处理程序编写单元测试。当查看运行此代码覆盖率报告时,我遇到了以下问题:从请求中读取请求正文时,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
的情况?