在用golang编写的Google App Engine应用程序中使用和测试本地软件包的好方法?

时间:2015-04-22 00:46:13

标签: google-app-engine go

我有一个测试我的GAE golang应用程序使用本地软件包的问题。 probject看起来像这样。

.
├── app.yaml
├── main.go
└── handler
    └── handler.go

handler包已导入main.go

package main

import "handler"

所有内容(例如goapp serve)都可以正常工作,直到我开始编写测试。 goapp test抱怨未找到handler个包。似乎是GOPATH goapp servegoapp test的不同之处。我找到的一个解决方案是放 handler包在项目路径之外并完全导入它 合格的名称(例如github.com/.../handler),但对我来说没有意义 将项目拆分到他们紧密耦合的不同地方。是 有没有什么好方法可以使用和测试本地包?

在此主题中找到以下资源。

2 个答案:

答案 0 :(得分:2)

这种情况来得很晚,但如果有人遇到同样的问题,请按照以下方法处理:

  1. 以这种方式组织代码

    /whereever
    └── /myproject
        └──/src
           ├── app.yaml
           ├── main.go
           └── /handler
               └── handler.go
    
  2. 对项目代码使用不合格的导入,例如

    import handler
    
  3. 从src文件夹中运行goapp servegoapp deploy。提供/部署相对于app.yaml的工作

    cd /whereever/myproject/src
    goapp serve 
    
  4. goapp test设置GOPATH,它基于GOPATH

    cd /whereever/myproject    #GOPATH expects a subfolder called src
    GOPATH=$GOPATH:`pwd`       #add the current folder to the GOPATH
    goapp test ./...           #run all tests in any subfolders
    
  5. 如有必要,重置您的GOPATH

    source ~/.profile #this assumes ~/.profile is where you have permanently set your GOPATH
    
  6. 总而言之,"按预期工作",但仍然很痛苦。

答案 1 :(得分:1)

您需要使用完全限定名称导入处理程序,但是您无需将其移出项目即可。如果您的项目文件夹如下所示:

/go
└── /myproject
    ├── app.yaml
    ├── main.go
    └── /handler
        └── handler.go

然后您的处理程序导入应如下所示:

import "myproject/handler"