gpt4 book ai didi

google-app-engine - 如何对 Google App Engine Go HTTP 处理程序进行单元测试?

转载 作者:IT老高 更新时间:2023-10-28 13:10:02 24 4
gpt4 key购买 nike

本地单元测试是 supported从 Google App Engine Go SDK 1.8.6 版开始。 appengine/aetest 包允许我创建一个 Context 来进行单元测试。

如何将它与 net/http/httptest 一起使用来测试我的 HTTP 处理程序?

最佳答案

查看 goroot/src/pkg/appengine/aetest/context.go 的顶部(更新的源代码尚未发布在 https://code.google.com/p/appengine-go )。乍一看,新的测试应用程序看起来比 appenginetesting 的版本更强大/不同。所以你可以做同样的测试,见here一种方法是调用 sampleHandler(w http.ResponseWriter, r *http.Request)。

或者,您可以使您的 http.Handler 的 ContextHandler 如下所示:

type ContextHandler struct {
Real func(*appengine.Context, http.ResponseWriter, *http.Request)
}

func (f ContextHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
c := appengine.NewContext(r)
f.Real(c, w, r)
}

func myNewHandler(c appengine.Context, w http.ResponseWriter, r *http.Request) {
// do something
}

然后你可以在 init() 中这样做来支持生产:

http.Handle("/myNewHandler", ContextHandler{myNewHandler})

这使得测试函数变得容易:

func TestMyNewHandler(t *testing.T) {
c := aetest.NewContext()
r, _ := http.NewRequest("GET", "/tasks/findOverdueSchedules", nil)
w := httptest.NewRecorder()
myNewHandler(c, w, r)
if 200 != w.Code {
t.Fail()
}
}

以下是 appengine/aetest 中 context.go 的内容:

/* Package aetest provides an appengine.Context for use in tests.

An example test file: package foo_test

import (
"testing"

"appengine/memcache"
"appengine/aetest"
)

func TestFoo(t *testing.T) {
c, err := aetest.NewContext(nil)
if err != nil {
t.Fatal(err)
}
defer c.Close()

it := &memcache.Item{
Key: "some-key",
Value: []byte("some-value"),
}
err = memcache.Set(c, it)
if err != nil {
t.Fatalf("Set err: %v", err)
}
it, err = memcache.Get(c, "some-key")
if err != nil {
t.Fatalf("Get err: %v; want no error", err)
}
if g, w := string(it.Value), "some-value" ; g != w {
t.Errorf("retrieved Item.Value = %q, want %q", g, w)
}
}

The environment variable APPENGINE_API_SERVER specifies the location of the api_server.py executable to use. If unset, the system PATH is consulted. */

关于google-app-engine - 如何对 Google App Engine Go HTTP 处理程序进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19407343/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com