我最近了解到你可以在go中做到这一点:
type Env struct{}
func (e *Env) httpHandler(w http.ResponseWriter, r *http.Request) {
//...
}
func main() {
// ...
e := &Env{}
router := mux.NewRouter()
router.HandleFunc("/foo", e.httpHandler)
}
这对于依赖注入非常有用,因为当我进行单元测试时,我可以简单地调用模拟env。httpHandler
但是,我的问题是...假设您有:
method := e.httpHandler
有没有办法在已经存储到反射或其他东西之后动态更改接收器的值?我可以更改传入的参数,但似乎接收器值已锁定,更改接收器的唯一方法是执行 。在我的情况下,这是不可能的,因为我是从多路复用器路由器中提取的,我只想在呼叫之前换出不同的接收器。ee.httpHandlermethodmethod()e2.httpHandlere.httpHandlerehttpHandler
对于更多的上下文,我基本上用来做表驱动的测试,其中我循环访问每个路由,调用处理程序,检查返回的响应是否是正确的形状,等等。但是,某些路由需要的数据库模拟与其他路由略有不同,因此对路由器中的所有路由使用一刀切的模拟接收器并不理想。我想将处理程序接收器与选定处理程序的自定义模拟环境动态交换。router.Walk()
万千封印
元芳怎么了
相关分类