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

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

如何在 GoLang 中取消設置在命令行上訪問的標志以進行測試

如何在 GoLang 中取消設置在命令行上訪問的標志以進行測試

Go
ABOUTYOU 2023-07-26 13:31:03
我正在嘗試運行每次使用不同參數多次調用同一函數的測試。這是一個接受不同命令行標志的應用程序。如果未提供命令行標志,則使用默認值。flagset = make(map[string]bool)flagset["flag1"] = falseflagset["flag2"] = falseflagset["flag3"] = falseflagset["flag4"] = falsefunc LoadCommandLineArguments(args []string) error{        err := flag.CommandLine.Parse(args)        /*Do error handling         */       flag.Visit(func(f *flag.Flag) { flagset[f.Name] = true })       // Iterate through all the flags and set their default values whatever was not passed on the commandline.}func resetFlags(){/* Reset flag variables to their original default values and set map values to false */flagset["flag1"] = falseflagset["flag2"] = falseflagset["flag3"] = falseflagset["flag4"] = false}我有不同的測試函數,每個函數都為測試提供不同的標志。例如:這就是我的測試文件的樣子func TestFlag1(t *testing.T) {   resetFlags()   err := LoadCommandLineArguments([]string{"-flag1=somevalue1"})}func TestFlag2(t *testing.T) {resetFlags()err := LoadCommandLineArguments([]string{"-flag2=somevalue2"})}func TestFlag3(t *testing.T) {resetFlags()err := LoadCommandLineArguments([]string{"-flag3=somevalue3"})}func TestFlag4(t *testing.T) {resetFlags()err := LoadCommandLineArguments([]string{""})}每當我單獨運行測試文件和每個單元測試時,它們似乎都工作正常。但是當我一起運行整個文件測試文件時,當它到達 testFlag4 時,在 LoadCommandLineArguments 中,它會訪問所有標志并認為所有標志都在命令行上傳遞,即使我在每個測試函數開始時重置它們。在 TestFlag1 中,它認為 flag1 已通過。在 TestFlag2 中,它認為 flag1 和 flag2 已通過。在TestFlag3中,它認為flag1、flag2、flag3通過了。同樣,在TestFlag4中,它認為flag1也通過了,flag2也通過了,flag3也通過了,而我什么也沒通過。我希望這個測試沒有通過任何命令行標志。flags.Visit 函數對于任何標志都不應該為 true。我知道通過將我的地圖值設置為 false,我實際上并沒有取消設置傳遞的命令行值,但是如何做到這一點呢?有沒有辦法在 Golang 中取消訪問/取消設置命令行標志?任何幫助將不勝感激。謝謝。
查看完整描述

1 回答

?
慕尼黑5688855

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

根據標志的源代碼,這應該可以工作(您需要將操作系統添加到導入中):

flag.CommandLine?=?flag.NewFlagSet(os.Args[0],?flag.ExitOnError)?//flags?are?now?reset

另外,就風格而言,還有一些事情:

當未找到鍵時,映射會返回默認值。所以所有這些初始化/重置行都可以刪除。

flagset = make(map[string]bool)

// the initialization lines are not needed; bool already initalizes to false:

//flagset["flag1"] = false

//...


func LoadCommandLineArguments(args []string) error{

? ?//...

}


func resetFlags(){

? ?/* Reset flag variables */

? ?flagset = make(map[string]bool)//just make a new map

}


查看完整回答
反對 回復 2023-07-26
  • 1 回答
  • 0 關注
  • 144 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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