在测试文档中:
“包是在一个临时目录中构建的,因此它不会干扰非测试安装。”
所以任何与可执行文件相关的目录的代码都不会出现在Temp\go构建中.
换言之,考虑到以下情况:
.\helloplanet.go
.\planets\planetary.res
.\helloplanet_test.go
go test在临时生成中生成一个exe .但是它也不会在那里重新创建一个行星\子for,所以helloplanet.exe中任何寻找planets\planetary.res的代码都不会找到它。
我们该如何处理这件事?
发布于 2014-03-17 19:15:51
虽然测试文件构建在临时位置,但您的工作目录将位于您期望的位置。如果您在测试函数中执行os.Getwd(),您将看到您的工作目录是包目录。在您的包中运行go test或使用完整的导入路径调用它时,只要您的包的位置在GOPATH中,这也应该是一样的。
在我的包中,我经常有一个testadata目录,它可以通过它的相对路径访问,并且没有问题。
发布于 2021-11-20 23:48:45
这是一个实际可行的解决方案。我发现这个埋在jetbrains论坛里。以下是用户提出的答案:
诀窍实际上非常简单,就是获取当前的执行并将..添加到项目根。
创建一个像testing_init.go这样的新目录和文件,内容如下:
package testing_init
import (
"os"
"path"
"runtime"
)
func init() {
_, filename, _, _ := runtime.Caller(0)
dir := path.Join(path.Dir(filename), "..")
err := os.Chdir(dir)
if err != nil {
panic(err)
}
}之后,只需将包导入任何测试文件:
package main_test
import (
_ "project/testing_init"
)现在可以从项目根指定路径。
https://stackoverflow.com/questions/22457861
复制相似问题