Ola*_*son 12 testing tdd google-app-engine go
我正在使用Go和appengine,现在我想做一些测试用例.
我尝试使用gos标准测试包,Files(两个"包你好"):
hello/http.go
hello/http_test.go
Run Code Online (Sandbox Code Playgroud)
问题:我无法运行go test hello
.我得到的最接近的是go test hello/http_test.go
,如果我不打电话http.go
,这是有效的,这是毫无意义的.:)
Kyl*_*ley 15
设置Go环境变量(您的路径可能会有所不同):
export GOPATH=~/gopath
export PATH=$PATH:$GOPATH/bin
Run Code Online (Sandbox Code Playgroud)设置Google App Engine环境变量(您的路径可能会有所不同):
export APPENGINE_SDK=$HOME/appengine
export PATH=$PATH:$APPENGINE_SDK
Run Code Online (Sandbox Code Playgroud)符号链接appengine
和appengine_internal
dirctories:
ln -s $APPENGINE_SDK/goroot/src/pkg/appengine $GOPATH/src/pkg/
ln -s $APPENGINE_SDK/goroot/src/pkg/appengine_internal $GOPATH/src/pkg/
Run Code Online (Sandbox Code Playgroud)go get github.com/mzimmerman/appenginetesting
Run Code Online (Sandbox Code Playgroud)appengintesting提供假的appengine.Context
.在幕后它启动一个Python开发服务器并通过它运行请求,因此测试可能有点慢(秒而不是毫秒).要在测试中使用它,你可以编写类似的东西
import "github.com/mzimmerman/appenginetesting"
...
c := appenginetesting.NewContext(nil)
Run Code Online (Sandbox Code Playgroud)
然后,您可以c
像使用实际一样使用appengine.Context
.这将在测试文件中工作,但它不适用于您通过调用创建的上下文appengine.NewContext(r)
我在gaego中使用的策略是从自定义包中导入上下文而不是appengine
.这允许我appengine.Context
在构建用于App Engine时使用appenginetesting.Context
,并在构建用于测试套件时使用.
通过设置以下构建标志:
// +build appengine
// +build !appengine
然后,而不是appengine
从我的包导入导入Eg
import (
github.com/gaego/context
)
..
c := context.NewContext(r)
..
Run Code Online (Sandbox Code Playgroud)
最后需要提到的是你必须显式关闭上下文,否则python进程将继续运行.您通过调用以下命令终止进程:
defer c.Close()
Run Code Online (Sandbox Code Playgroud)
有关更多示例,请查看:
编辑: Takuya Ueda创造了一个与最新SDK一起使用的早午餐
Edit2: Joshua Marsh维护了一个与最新SDK兼容的分支
编辑3: Matt Zimmerman维护一个包含额外功能的分支,而不是标准的aetest包(登录/注销和任务队列)