在為某個項目添加了通過命令行獲取指定配置的模塊后,在一些模塊內部跑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解析。