首页 > 解决方案 > 在初始化函数中使用相对路径在测试中找不到

问题描述

在 init 函数中使用单元测试找不到的相对路径时,我遇到了一个烦人的问题。

假设我有一个结构如下的项目:

.
├── conf
│   └── blacklist
├── filter
│   ├── filter.go
│   └── filter_test.go

而在init函数中filter.go,我尝试使用相对路径加载黑名单,conf/blacklist避免多次加载。由于默认工作目录正是项目根目录,因此它适用于已编译的二进制文件。但是filter_test.go会恐慌 panic: open conf/blacklist: no such file or directory,因为 go test 总是使用包目录作为工作目录。

我还提到了这个解决方案,它可以动态构建相对路径来查找配置文件。在我添加covermode=set标志并尝试进行一些覆盖测试之前,它确实运行良好。似乎covermode会重写并生成一些中间包,例如_obj,这使得动态相对路径不再起作用。

有没有人遇到过同样的问题?几个月来,我仍然是golang的新手。任何建议将不胜感激。

标签: testinggo

解决方案


一个简单的解决方案是使用类似的东西运行测试SRC_ROOT=$PWD go test,然后在想要访问文件的测试中使用os.Getenv("SRC_ROOT").


推荐阅读