golang单元测试时关于相对路径的处理问题?

在写代码的时候需要访问某些文件,比如配置文件,在project/conf/xx.ini
我的main文件在project/src下
然后代码内直接使用相对路径./conf/xx.ini可以访问的到
然后写单元测试的时候,报错说找不到这个文件
比如单元测试在project/src/systom执行,我想了一下,应该是因为执行文件的当前路径发生了变化。
有什么好的办法,如果写绝对路径的话迁移部署太不方便了。比如go test后面可以加个参数指定下当前路径什么的?各位大神帮帮忙

阅读 17.5k
4 个回答
func getCurrentPath() string {
    _, filename, _, _ := runtime.Caller(1)

    return path.Dir(filename)
}

上面这个方法可以获取到当前这个函数(getCurrentPath)所在的*.go文件的目录,比如这段代码是放在a.go文件中的,那么调用getCurrentPath函数它得到的就是a.go这个文件所在的目录。

单元测试也要保证可移植性。要做到这点,最好就是将单元测试的依赖通过程序创建。比如你的单元测试依赖配置文件,那直接使用程序创建一个配置文件,测试结束就清除现场,把创建的文件删除就OK了。

思路的话

1、配置全局系统参数
2、通过执行命令时的外部参数,但是go test -argsgo rungo buildos.args又有些冲突
3、将配置模块 写成“堆积木”一样 不要强依赖 应当和注册配置项一样

可以看下 聊一聊,Golang “相对”路径问题

今天刚好碰到这个问题,我的解决方案是用相对路径引用
conf/app.ini
project/src/systom_test.go 这里使用../../conf/app.ini访问

推荐问题
宣传栏