google.golang.org/appengine/aetest 包 (v1.6.8)

软件包 aetest 提供了一个用于运行 dev_appserver 的 API,以便在测试中使用。

测试文件示例:

package foo_test

import (
    "testing"

    "google.golang.org/appengine/memcache"
    "google.golang.org/appengine/aetest"
)

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

    it := &memcache.Item{
        Key:   "some-key",
        Value: []byte("some-value"),
    }
    err = memcache.Set(ctx, it)
    if err != nil {
        t.Fatalf("Set err: %v", err)
    }
    it, err = memcache.Get(ctx, "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)
    }
}

环境变量 APPENGINE_DEV_APPSERVER 指定要使用的 dev_appserver.py 可执行文件的位置。如果未设置,则查询系统 PATH。

变量

PrepareDevAppserver

var PrepareDevAppserver func() error

PrepareDevAppserver 是钩子,如果设置,则将在每次启动 dev_appserver.py 之前都会调用它。如果从 goapp 测试工具调用 aetest.NewContext,则不需要此钩子。

函数

func Login

func Login(u *user.User, req *http.Request)

Login 让提供的 Request 表现得就像给定用户发出的一样。

func Logout

func Logout(req *http.Request)

Logout 让提供的 Request 表现得就像已注销的用户发出的一样。

func NewContext

func NewContext() (context.Context, func(), error)

NewContext 启动开发 API 服务器的实例,并返回将所有 API 调用路由到该服务器的上下文,以及在不再需要 Context 时必须调用的闭包。

Instance

type Instance interface {
	// Close kills the child api_server.py process, releasing its resources.
	io.Closer
	// NewRequest returns an *http.Request associated with this instance.
	NewRequest(method, urlStr string, body io.Reader) (*http.Request, error)
}

Instance 表示开发 API 服务器的运行实例。

func NewInstance

func NewInstance(opts *Options) (Instance, error)

NewInstance 启动 api_server.py 的运行实例,该实例可用于将所有 App Engine API 调用委托给该实例的多个测试 Context。 如果 opts 为 nil,则使用默认值。

Options

type Options struct {
	// AppID specifies the App ID to use during tests.
	// By default, "testapp".
	AppID string
	// StronglyConsistentDatastore is whether the local datastore should be
	// strongly consistent. This will diverge from production behaviour.
	StronglyConsistentDatastore bool
	// SupportDatastoreEmulator is whether use Cloud Datastore Emulator or
	// use old SQLite based Datastore backend or use default settings.
	SupportDatastoreEmulator *bool
	// SuppressDevAppServerLog is whether the dev_appserver running in tests
	// should output logs.
	SuppressDevAppServerLog bool
	// StartupTimeout is a duration to wait for instance startup.
	// By default, 15 seconds.
	StartupTimeout time.Duration
}

Options 用于在创建 Instance 时指定选项。