亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

盡管在 init() 中定義了標志,但 Go 測試中出現“提供標志但未定義”錯誤?

盡管在 init() 中定義了標志,但 Go 測試中出現“提供標志但未定義”錯誤?

Go
喵喔喔 2022-07-11 16:23:57
這個問題類似于go test flag: flag provided but not defined,但是由于該問題不包含最小示例并且答案非常高級,所以我再問一次。在帶有 amain.go和 a的 Go 模塊中main_test.go,.├── go.mod├── go.sum├── main.go└── main_test.gomain.go定義一個sayHi標志:package mainimport (    "flag"    "fmt")var sayHi boolfunc init() {    flag.BoolVar(&sayHi, "sayHi", false, "Say hi or not")    flag.Parse()}func main() {    if sayHi {        fmt.Println("Hi!")    }}這main_test.go只是一個占位符測試:package mainimport "testing"func TestSayHi(t *testing.T) {}問題是,如果我嘗試運行測試,我會收到“已提供標志但未定義”錯誤:> go test ./...flag provided but not defined: -test.testlogfileUsage of /var/folders/tp/s7nwwdws1wj0z8s0vftppnnc0000gn/T/go-build952058535/b001/my-module.test:  -sayHi        Say hi or notFAIL    github.com/kurtpeek/my-module   0.192sFAIL從上述問題的答案來看,您必須確保所有標志定義都發生在調用之前flag.Parse(),通常是通過在init()函數中定義所有標志。我不明白這不是在這里完成的嗎?
查看完整描述

2 回答

?
MM們

TA貢獻1886條經驗 獲得超2個贊

使用以下命令創建測試二進制文件,然后使用您的參數執行它。


> go test -c -o test

./test --sayHi=true

PASS

go test 命令不會將參數傳遞給底層測試。


查看完整回答
反對 回復 2022-07-11
?
開滿天機

TA貢獻1786條經驗 獲得超13個贊

2022 年 5 月更新 - 未修復

到目前為止,推薦的方法是將標志初始化移到外面init()(太愚蠢了,我知道?。?/p>

所以我這樣做了:

  • 將用于標志處理的代碼移動到它自己的函數中,

  • 然后在頂部調用該函數main()

我的測試不再抱怨。

func initParseCommandLineFlags() {

   // do your flag thing here

}


func main() {

    initParseCommandLineFlags()

    ...

}

注意:一個巨大的缺點是我必須將所有初始化移出init()其他設置功能,因為我的程序啟動可以通過命令行開關進行修改。


所以我沒有init了:(


參考:https ://github.com/golang/go/issues/46869#issuecomment-865695953


查看完整回答
反對 回復 2022-07-11
  • 2 回答
  • 0 關注
  • 113 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號