go test: flag provided but not defined: -test.timeout

在为某个项目添加了通过命令行获取指定配置的模块后,在一些模块内部跑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解析。

posted @ 2021-12-06 14:18  realcp1018  阅读(2380)  评论(0编辑  收藏  举报