如何在Golang中测试http请求处理程序?

如何在Golang中测试http请求处理程序?,第1张

概述我有一组请求处理程序,如下所示: func GetProductsHandler(w http.ResponseWriter, req *http.Request) { defer req.Body.Close() products := db.GetProducts() // ... // return products as JSON array} 我 我有一组请求处理程序,如下所示:

@H_404_11@func GetProductsHandler(w http.ResponseWriter,req *http.Request) { defer req.Body.Close() products := db.GetProducts() // ... // return products as JsON array}

我该如何以正确的方式测试它们?我应该将模拟ResponseWriter和Request对象发送到该函数并查看结果吗?

是否有工具在Go中模拟请求和响应对象以简化流程而无需在测试之前启动服务器?

解决方法 Go提供了一个模拟编写器,用于测试处理程序. standard library documentation提供了一个例子:

@H_404_11@package mainimport ( "fmt" "net/http" "net/http/httptest")func main() { handler := func(w http.ResponseWriter,r *http.Request) { http.Error(w,"something Failed",http.StatusInternalServerError) } req := httptest.NewRequest("GET","http://example.com/foo",nil) w := httptest.NewRecorder() handler(w,req) fmt.Printf("%d - %s",w.Code,w.Body.String())}

我认为拥有一个全局依赖(db)会对完整的单元测试产生影响.使用go你的测试可以重新分配值,屏蔽,db的全局值.

另一个策略(我的首选)是将处理程序打包在一个结构中,该结构具有db属性.

@H_404_11@type Handlers struct { db DB_INTERFACE}func (hs *Handlers) GetProductsHandler(w http.ResponseWriter,req *http.Request) {...}

这样,您的测试可以使用存根数据库对象实例化一个处理程序,这将允许您创建无IO单元测试.

总结

以上是内存溢出为你收集整理的如何在Golang中测试http请求处理程序?全部内容,希望文章能够帮你解决如何在Golang中测试http请求处理程序?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1265601.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存