我有一个功能需要测试,如下所示:
func parmHandler(w http.ResponseWriter, r *http.Request) {
...
data, err = backenddb_call(r *http.Request)
...
return
}
function backenddb_call(r *http.Request) (data []Data, err error){
parm := r.URL.Query().Get(parm)
//Get Data from DB for parm
...
return
}
在这种HTTP处理程序情况下,我无法修改parmHandler
参数并添加帮助程序接口参数来帮助进行模拟。如何模拟backenddb_call返回不同的响应?
答案 0 :(得分:1)
您可以有一个返回处理程序的函数,您可以将backenddb_call
作为参数传递给:
https://play.golang.org/p/aSMxeEgJL8U
func GetHandler(fn func (r *http.Request) ([]Data, error)) http.Handler {
return http.HandlerFunc(func (w http.ResponseWriter, r *http.Request) {
data, err := fn(r)
fmt.Println(data, err)
})
}
然后,当您创建它时:
http.HandleFunc("/test", GetHandler(backenddb_call))
要进行测试,您可以传递另一个呼叫:
GetHandler(func (r *http.Request) ([]Data, error) {
fmt.Println("Mock")
return []Data{"This", "Is", "A", "Fake", "Response"}, nil
})