在为某个项目添加了通过命令行获取指定配置的模块后,在一些模块内部跑test发生了如下错误:
flag provided but not defined: -test.timeout
很显然,跑go test时涉及到了flag解析。
go test是以package为单位进行测试的(无论是否通过-run指定特性test函数),所以一定是test所在的包内包含了flag解析逻辑或import了需要进行flag解析的其他package.
此错误有些类似于package的循环引用。
一般来说考虑如下解除方式:
1. 先不使用flag模块,即注释相关的内容。 --工作量大,大型项目不合适
2. 单独起一个test文件夹,里边只放test相关的模块,并去除掉引用了flag的模块,如需使用此类模块,可以把把其中需要用的对象也拷贝一份。 --较繁琐且涉及flag解析时依旧有问题
3. 最后编写config相关模块,在这之前做好测试工作。 --还是很麻烦
4. 单独设置一个flag模块进行InitFlag(),返回需要的参数列表,其他package中引用此处的初始化函数。
使用cobra等第三方的命令行可以比较方便的跳过此错误,一般来说就是要将flag解析独立出去即可,防止go test调用flag解析。