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