首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用相关目录测试Go程序?

如何用相关目录测试Go程序?
EN

Stack Overflow用户
提问于 2014-03-17 15:05:22
回答 2查看 7.1K关注 0票数 4

在测试文档中:

“包是在一个临时目录中构建的,因此它不会干扰非测试安装。”

所以任何与可执行文件相关的目录的代码都不会出现在Temp\go构建中.

换言之,考虑到以下情况:

.\helloplanet.go

.\planets\planetary.res

.\helloplanet_test.go

代码语言:javascript
复制
go test

在临时生成中生成一个exe .但是它也不会在那里重新创建一个行星\子for,所以helloplanet.exe中任何寻找planets\planetary.res的代码都不会找到它。

我们该如何处理这件事?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-17 19:15:51

虽然测试文件构建在临时位置,但您的工作目录将位于您期望的位置。如果您在测试函数中执行os.Getwd(),您将看到您的工作目录是包目录。在您的包中运行go test或使用完整的导入路径调用它时,只要您的包的位置在GOPATH中,这也应该是一样的。

在我的包中,我经常有一个testadata目录,它可以通过它的相对路径访问,并且没有问题。

票数 3
EN

Stack Overflow用户

发布于 2021-11-20 23:48:45

这是一个实际可行的解决方案。我发现这个埋在jetbrains论坛里。以下是用户提出的答案:

诀窍实际上非常简单,就是获取当前的执行并将..添加到项目根。

创建一个像testing_init.go这样的新目录和文件,内容如下:

代码语言:javascript
复制
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)
  }
}

之后,只需将包导入任何测试文件:

代码语言:javascript
复制
package main_test

import (
  _ "project/testing_init"
)

现在可以从项目根指定路径。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22457861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档