我正在嘗試運(yùn)行每次使用不同參數(shù)多次調(diào)用同一函數(shù)的測(cè)試。這是一個(gè)接受不同命令行標(biāo)志的應(yīng)用程序。如果未提供命令行標(biāo)志,則使用默認(rèn)值。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}我有不同的測(cè)試函數(shù),每個(gè)函數(shù)都為測(cè)試提供不同的標(biāo)志。例如:這就是我的測(cè)試文件的樣子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{""})}每當(dāng)我單獨(dú)運(yùn)行測(cè)試文件和每個(gè)單元測(cè)試時(shí),它們似乎都工作正常。但是當(dāng)我一起運(yùn)行整個(gè)文件測(cè)試文件時(shí),當(dāng)它到達(dá) testFlag4 時(shí),在 LoadCommandLineArguments 中,它會(huì)訪問(wèn)所有標(biāo)志并認(rèn)為所有標(biāo)志都在命令行上傳遞,即使我在每個(gè)測(cè)試函數(shù)開(kāi)始時(shí)重置它們。在 TestFlag1 中,它認(rèn)為 flag1 已通過(guò)。在 TestFlag2 中,它認(rèn)為 flag1 和 flag2 已通過(guò)。在TestFlag3中,它認(rèn)為flag1、flag2、flag3通過(guò)了。同樣,在TestFlag4中,它認(rèn)為flag1也通過(guò)了,flag2也通過(guò)了,flag3也通過(guò)了,而我什么也沒(méi)通過(guò)。我希望這個(gè)測(cè)試沒(méi)有通過(guò)任何命令行標(biāo)志。flags.Visit 函數(shù)對(duì)于任何標(biāo)志都不應(yīng)該為 true。我知道通過(guò)將我的地圖值設(shè)置為 false,我實(shí)際上并沒(méi)有取消設(shè)置傳遞的命令行值,但是如何做到這一點(diǎn)呢?有沒(méi)有辦法在 Golang 中取消訪問(wèn)/取消設(shè)置命令行標(biāo)志?任何幫助將不勝感激。謝謝。
1 回答

慕尼黑5688855
TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超2個(gè)贊
根據(jù)標(biāo)志的源代碼,這應(yīng)該可以工作(您需要將操作系統(tǒng)添加到導(dǎo)入中):
flag.CommandLine?=?flag.NewFlagSet(os.Args[0],?flag.ExitOnError)?//flags?are?now?reset
另外,就風(fēng)格而言,還有一些事情:
當(dāng)未找到鍵時(shí),映射會(huì)返回默認(rèn)值。所以所有這些初始化/重置行都可以刪除。
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
}
- 1 回答
- 0 關(guān)注
- 150 瀏覽
添加回答
舉報(bào)
0/150
提交
取消