[英]go - How to mock fiber context
我一直在尝试模拟 fiber.Ctx 但我无法使其正常工作我一直收到此错误:
---失败:TestCheckHeaders(0.00s)恐慌:运行时错误:无效内存地址或零指针取消引用[已恢复]恐慌:运行时错误:无效内存地址或零指针取消引用[信号SIGSEGV:分段违规代码= 0x1地址= 0x0 pc =0x12085f0]
我要测试的代码:
CheckHeaders.go
package middleware
import "github.com/gofiber/fiber/v2"
func CheckHeaders(c *fiber.Ctx) error {
headers := c.GetReqHeaders()
if headers["headerValue"] == "true"{
return c.Next()
} else {
return c.SendStatus(401)
}
}
CheckHeaders_test.go
package middleware
import (
"testing"
"github.com/gofiber/fiber/v2"
)
func TestCheckHeaders(t *testing.T) {
type args struct {
c *fiber.Ctx
}
fiberContext := fiber.Ctx{}
tests := []struct {
name string
args args
wantErr bool
}{
{name: "test 1",
args: args{c: &fiberContext},
wantErr: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if err := CheckHeaders(tt.args.c); (err != nil) != tt.wantErr {
t.Errorf("CheckHeaders() error = %v, wantErr %v", err,tt.wantErr)
}
})
}
}
您可以使用需要从fiber.Ctx
结构使用的方法创建自己的接口,并为该接口制作模拟。
之后,您将处理fiber.Ctx
作为例如Ctxer
接口的实现,因此您将能够使用https://github.com/golang/mock模拟它并在您的测试中使用模拟。
它会看起来像这样
type Ctxer interface {
GetReqHeaders() map[string]string
Next() (err error)
SendStatus(status int) error
}
func CheckHeaders(c Ctxer) error {
headers := c.GetReqHeaders()
if headers["headerValue"] == "true" {
return c.Next()
} else {
return c.SendStatus(401)
}
}
这就是我如何设置一个新的上下文,我可以操纵它来进行测试。 希望能帮助到你。
app := fiber.New()
c := app.AcquireCtx(&fasthttp.RequestCtx{})
c
将是一个新的*fiber.Ctx
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.