我在自定义上下文中使用 echo 框架:
csplit
我的中间件:
ApiContext struct {
echo.Context
UserID int64
UserRole string
}
我的处理程序:
e.Use(func(h echo.HandlerFunc) echo.HandlerFunc {
return func(c echo.Context) error {
cc := &common.ApiContext{c, 0, ""}
return h(cc)
}
})
我的测试:
func (app *App) listEntity(c echo.Context) error {
ctx := c.(*ApiContext) // error!
....
}
我收到此错误:
panic:接口转换:echo.Context是* echo.context,不是 * common.ApiContext
在处理程序函数类型声明中
如何正确编写测试? ps。这种方法很好用。
答案 0 :(得分:1)
因此,当该方法可能出现紧急情况时,它并不是很好。您可以非常简单地捕获该错误:
ctx, ok := c.(*ApiContext)
if !ok {
// do something when you have a different type
// return an error here
}
我认为您不应该使用与echo.Context
不同的上下文,因为仅在该上下文中才支持测试。
但是回到您的问题。如果要使用上下文进行测试,则需要将上下文而不是echo.Context
传递到测试中。
答案 1 :(得分:0)
之前:
if assert.NoError(t, EntityList(c)) {
assert.Equal(t, http.StatusOK rec.Code)
}
之后(按原样放在您的自定义上下文中):
if assert.NoError(t, EntityList(&common.ApiContext{c, 0, ""})) {
assert.Equal(t, http.StatusOK rec.Code)
}
但是,使用标准的context.Context
是更好的做法。