Google app engine go和appengine的测试用例

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和appengine,现在我想做一些测试用例

我试着使用gos标准测试包, 文件(都是“包hello”):

问题:我无法运行
go test hello
。我得到的最接近的是
go-test hello/http\u-test.go
,如果我不调用
http.go
,这是毫无意义的。:)

装置
  • 设置Go环境变量(您的路径可能会有所不同):

  • 下载

  • 设置Google App Engine环境变量(您的路径可能会有所不同):

  • 符号链接
    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/
    
  • 安装

  • 写作测试 appenginetest提供了一个假的
    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()