Unit testing 在助手函数中包装httptest方法

Unit testing 在助手函数中包装httptest方法,unit-testing,http,go,gomega,Unit Testing,Http,Go,Gomega,在我的处理程序测试中,我多次使用头中带有身份验证令牌的测试请求服务模式。为了对此进行抽象,并节省大量的行,我编写了以下函数: func-servetstreq(有效负载字符串、路由字符串、方法字符串、handlerfunc-func(w http.ResponseWriter、r*http.Request)、令牌字符串){ 正文:=strings.NewReader(有效负载) req,err:=http.NewRequest(方法、路由、正文) Expect(err).NotTo(haveOc

在我的处理程序测试中,我多次使用头中带有身份验证令牌的测试请求服务模式。为了对此进行抽象,并节省大量的行,我编写了以下函数:

func-servetstreq(有效负载字符串、路由字符串、方法字符串、handlerfunc-func(w http.ResponseWriter、r*http.Request)、令牌字符串){
正文:=strings.NewReader(有效负载)
req,err:=http.NewRequest(方法、路由、正文)
Expect(err).NotTo(haveOccurrent())
req.Header.Add(“内容”、“应用程序/json”)
请求头添加(“授权”、“承载人”+令牌)
处理程序:=authMiddleware(handlerfunc)
rr:=httptest.NewRecorder()
handler.ServeHTTP(rr,req)
}

但是,如果我调用此函数两次(例如,为了测试幂等
POST
s),则请求似乎只被服务一次。上述函数是否有问题?

问题在于我没有检查函数中生成的HTTP响应。正确的函数如下所示:

func servetstreq(有效负载字符串、路由字符串、方法字符串、handlerfunc func(w http.ResponseWriter、r*http.Request)、令牌字符串)*httptest.RepsonseRecorder{
正文:=strings.NewReader(有效负载)
req,err:=http.NewRequest(方法、路由、正文)
Expect(err).NotTo(haveOccurrent())
req.Header.Add(“内容”、“应用程序/json”)
请求头添加(“授权”、“承载人”+令牌)
处理程序:=authMiddleware(handlerfunc)
rr:=httptest.NewRecorder()
handler.ServeHTTP(rr,req)
返回rr
}

此函数中没有任何明显的东西可以使其成为非幂等函数。您可能需要包含其他代码以暴露问题。我已发现问题-在
serveTestReq
中,我需要返回
rr
,并在那里检查HTTP响应。很高兴您找到了解决方案