【Golang】解决Go test执行单个测试文件提示未定义问题

背景

很多人记录过怎么执行Go test单个文件或者单个函数,但是要么对执行单文件用例存在函数或变量引用的场景避而不谈,要么提示调用了其它文件中的模块会报错。其实了解了go test命令的机制之后,这个问题就迎刃而解了。

也是一个同事向我求助我才知道有这样一个问题存在,因为场景特殊他只想执行我们的测试代码其中一个文件中的测试代码,因为调用的信息都在同一目录(package)下,原代码执行是不存在引用问题的,直接执行go test也是可以运行的,但是单独运行其中一个文件时,出现了下面的错误:
【Golang】解决Go test执行单个测试文件提示未定义问题

根本原因

其实从看看上面的这段提示:build failed,构建失败,我们应该就能看出一下信息。go test与其他的指定源码文件进行编译或运行的命令程序一样(参考:go run和go build),会为指定的源码文件生成一个虚拟代码包——“command-line-arguments”,对于运行这次测试的命令程序来说,测试源码文件getinfo_test.go是属于代码包“command-line-arguments”的,可是它引用了其他包中的数据并不属于代码包“command-line-arguments”,编译不通过,错误自然发生了。

解决方法

解决
知道了原因之后,解决的方法就出来了,执行命令时加入这个测试文件需要引用的源码文件,在命令行后方的文件都会被加载到command-line-arguments中进行编译。。示例如下:
【Golang】解决Go test执行单个测试文件提示未定义问题
多级引用或多个引用包的情况
【Golang】解决Go test执行单个测试文件提示未定义问题

总结

测试单个文件,一定要带上被测试的原文件,如果原文件有其他引用,也需一并带上。
找到的这个帖子确实解决了一直疑惑的问题,转载记录,希望能帮到更多的人。

转载

https://www.cnblogs.com/Detector/p/10010292.html