猿问

在测试中找不到在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总是使用package目录作为工作目录。


我还提到了此解决方案,该解决方案可以动态构建相对路径以找到配置文件。直到我添加covermode=set标志并尝试进行覆盖测试之前,它的效果都很好。似乎covermode会重写并生成一些中间包,如_obj,这使得动态相对路径不再起作用。


有人遇到过同样的问题吗?我还刚接触golang几个月了。任何建议将不胜感激。


狐的传说
浏览 272回答 1
1回答

慕的地10843

一个简单的解决方案是使用类似的东西运行测试SRC_ROOT=$PWD go test,然后在想要访问文件use的测试内部os.Getenv("SRC_ROOT")。
随时随地看视频慕课网APP

相关分类

Go
我要回答