我有一个测试我的GAE golang应用程序使用本地软件包的问题。 probject看起来像这样。
.
├── app.yaml
├── main.go
└── handler
└── handler.go
handler
包已导入main.go
。
package main
import "handler"
所有内容(例如goapp serve
)都可以正常工作,直到我开始编写测试。
goapp test
抱怨未找到handler
个包。似乎是GOPATH
goapp serve
和goapp test
的不同之处。我找到的一个解决方案是放
handler
包在项目路径之外并完全导入它
合格的名称(例如github.com/.../handler
),但对我来说没有意义
将项目拆分到他们紧密耦合的不同地方。是
有没有什么好方法可以使用和测试本地包?
在此主题中找到以下资源。
答案 0 :(得分:2)
这种情况来得很晚,但如果有人遇到同样的问题,请按照以下方法处理:
以这种方式组织代码
/whereever
└── /myproject
└──/src
├── app.yaml
├── main.go
└── /handler
└── handler.go
对项目代码使用不合格的导入,例如
import handler
从src文件夹中运行goapp serve
和goapp deploy
。提供/部署相对于app.yaml的工作
cd /whereever/myproject/src
goapp serve
为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
如有必要,重置您的GOPATH
source ~/.profile #this assumes ~/.profile is where you have permanently set your GOPATH
总而言之,"按预期工作",但仍然很痛苦。
答案 1 :(得分:1)
您需要使用完全限定名称导入处理程序,但是您无需将其移出项目即可。如果您的项目文件夹如下所示:
/go
└── /myproject
├── app.yaml
├── main.go
└── /handler
└── handler.go
然后您的处理程序导入应如下所示:
import "myproject/handler"