私は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...
}
はどのようにしてもnil
さbytesErr
ない場合をカバーHandlePostRequest
ためのテストケースを書くことができますか?
偉大な答えは、私が探していたものです。 return文は私の実際のコードにありますが、とにかくそれを述べてくれてありがとう、私は他人の混乱を避けるために質問に追加します。 – m90