我正在尝试为go中的简单休息应用程序编写测试。所以我写了这样的话:
func TestMyTestFunc(t *testing.T) {
var w = httptest.NewRecorder()
req, err := http.NewRequest("POST", "/", nil)
if err != nil {
t.Errorf("Error creating request: %s", err.Error())
}
// req.Header.Add("Content-Type", "application/json")
// req.Header.Add("Accept", "application/json")
l.ServeHTTP(w, req) // l is defined somewhere above
// check for w.Code, w.Body
}
这完全没问题。现在我想添加标题。所以我添加了注释标题部分,最后得到:
panic: runtime error: invalid memory address or nil pointer dereference [recovered]
panic: runtime error: invalid memory address or nil pointer dereference
错误就在这一行:l.ServeHTTP(w, req)
。
有趣的是,如果我只设置Content-Type
或Accept
,测试会运行,但如果我同时设置,则会失败。怎么了?
P.S。我也尝试使用req.Header.Set
,但没有区别。
这是我的处理程序的存根:
func (l myHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
// check for validity
if !valid {
http.Error(w, "Invalid Accept", http.StatusBadRequest)
return
}
w.WriteHeader(http.StatusNoContent)
return
}
答案 0 :(得分:1)
我认为你的http服务器/处理程序实现中的错误。我试图重现它并且它有效。
你可以在这里看到: http://play.golang.org/p/n1YBl3OpbN