这个问题是this one的后续问题.我想要一个简单的测试https://pkg.go.dev/github.com/alexedwards/scs/v2@v2.5.1来验证我想使用的功能.基本上,我只想将一些数据放入会话中,取出它,并验证它们是否相同.类似于:
func TestScs_SetGetIsSame1(t *testing.T) {
sessionManager := scs.New()
req := httptest.NewRequest("GET", "/", nil)
key := "boolean"
expected := false
sessionManager.Put(req.Context(), key, expected)
actual := sessionManager.GetBool(req.Context(), key)
assert.Equal(t, expected, actual)
}
这会导致死机:scs:上下文中没有会话数据.
我try 复制example from the httptest package,但HTTPest.Server不实现HTTP.Handler(缺少方法ServeHTTP).
func TestScs_SetGetIsSame2(t *testing.T) {
sessionManager := scs.New()
ts := httptest.NewServer((http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Hello, client")
expected := true
sessionManager.Put(r.Context(), "key", expected)
actual := sessionManager.GetBool(r.Context(), "key")
assert.Equal(t, expected, actual)
})))
defer ts.Close()
res, err := http.Get(ts.URL)
if err != nil {
log.Fatal(err)
}
greeting, err := io.ReadAll(res.Body)
res.Body.Close()
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s", greeting)
sessionManager.LoadAndSave(ts)
}
我也查看了tests in the alexedwards/scs repository,但它们使用私有函数addSessionDataToContext.
测试围棋的最好、最简单的方法是什么?