在init函数中使用相对路径时,我遇到了一个烦人的问题,而单元测试无法找到相对路径。
说我有一个结构如下的项目:
.
├── conf
│ └── blacklist
├── filter
│ ├── filter.go
│ └── filter_test.go
在init
的{{1}}函数中,我尝试使用相对路径filter.go
加载黑名单,以避免多次加载。
由于默认的工作目录恰好是项目的根目录,因此它与已编译的二进制文件很好地兼容。但是conf/blacklist
会惊慌
filter_test.go
,因为go test始终使用package目录作为工作目录。
我还提到了this solution,它可以动态地建立相对路径来查找配置文件。在我添加panic: open conf/blacklist: no such file or directory
标志并尝试进行一些覆盖率测试之前,它确实运行良好。似乎covermode=set
会重写并生成一些covermode
之类的中间包,这会使动态相对路径不再起作用。
以前有人遇到过同样的问题吗?我刚接触golang有几个月了。任何建议将不胜感激。
答案 0 :(得分:1)
一个简单的解决方案是使用SRC_ROOT=$PWD go test
之类的东西运行测试,然后在想要访问文件的测试中使用os.Getenv("SRC_ROOT")
。