Google app engine go和appengine的测试用例
我正在使用Go和appengine,现在我想做一些测试用例 我试着使用gos标准测试包, 文件(都是“包hello”): 问题:我无法运行Google app engine go和appengine的测试用例,google-app-engine,testing,tdd,go,Google App Engine,Testing,Tdd,Go,我正在使用Go和appengine,现在我想做一些测试用例 我试着使用gos标准测试包, 文件(都是“包hello”): 问题:我无法运行go test hello。我得到的最接近的是go-test hello/http\u-test.go,如果我不调用http.go,这是毫无意义的。:) 装置 设置Go环境变量(您的路径可能会有所不同): 下载 设置Google App Engine环境变量(您的路径可能会有所不同): 符号链接appengine和appengine\u内部目录: ln
go test hello
。我得到的最接近的是go-test hello/http\u-test.go
,如果我不调用http.go
,这是毫无意义的。:)
装置
appengine
和appengine\u内部
目录:
ln -s $APPENGINE_SDK/goroot/src/pkg/appengine $GOPATH/src/pkg/
ln -s $APPENGINE_SDK/goroot/src/pkg/appengine_internal $GOPATH/src/pkg/
appengine.Context
。在幕后,它启动一个Python开发服务器并通过它运行请求,因此测试可能会有点慢(秒而不是毫秒)。要在测试中使用它,您可以编写如下内容
import "github.com/mzimmerman/appenginetesting"
...
c := appenginetesting.NewContext(nil)
然后可以像使用实际的appengine.Context
一样使用c
。这将在测试文件中起作用,但不适用于通过调用appengine.NewContext(r)
我在中使用的策略是从自定义包导入上下文,而不是appengine
。这允许我在构建用于App Engine时使用appengine.Context
,在构建用于测试套件时使用appenginetesting.Context
通过设置以下生成标志:
- context_appengine.go
/+build appengine
- context_testing.go
/+build!appengine
appengine
导入,而是从我的包导入,例如
import (
github.com/gaego/context
)
..
c := context.NewContext(r)
..
最后需要提到的是,必须显式关闭上下文,否则python进程将继续运行。您可以通过调用以下命令终止进程:
defer c.Close()
有关更多示例,请查看:
编辑:Takuya Ueda创建了一个可与最新SDK配合使用的早午餐
Edit2:维护与最新SDK兼容的fork
Edit3:在标准aetest包(登录/注销和任务队列)上维护一个具有附加功能的fork一个有趣的发展:从1.8.6开始,使用服务存根进行测试已通过
“appengine/aetest”
包集成到SDK中。这在很大程度上类似于上面通过“测试”上下文进行的工作 谢谢你的提示。不幸的是,我一点也不明白。谷歌搜索了它,但找不到任何使用说明(大部分是误导)。@Olandersson我已经更新了我的答案,包括设置和使用。如果有任何不清楚的地方,请告诉我。很好,谢谢!我还需要添加一些东西:我还需要复制“code.google.com”文件夹,就像appengine和appengine_一样。希望这将是将来go appengine设置的一部分。@Olandersson我很高兴它成功了!感谢您提到code.google.com/p/goprotobuf
软件包,我已经更新了答案,将其包括在内。从邮件列表上的评论来看,appenginetesting
将出现在sdk中,我认为AEGo团队目前有很多事情要做。希望谷歌能很快为他们提供更多的资源。这是谷歌官方支持的测试方法,但是它缺少AppingineTesting中的一些功能。我可以这么说。我们需要跑去让它工作。
go get github.com/mzimmerman/appenginetesting
import "github.com/mzimmerman/appenginetesting"
...
c := appenginetesting.NewContext(nil)
import (
github.com/gaego/context
)
..
c := context.NewContext(r)
..
defer c.Close()