Я пытаюсь запустить тесты, которые вызывают одну и ту же функцию несколько раз с разными аргументами каждый раз. Это приложение, которое принимает разные флаги командной строки. Если флаг командной строки не указан, используется значение по умолчанию.
flagset = make(map[string]bool)
flagset["flag1"] = false
flagset["flag2"] = false
flagset["flag3"] = false
flagset["flag4"] = false
func 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"] = false
flagset["flag2"] = false
flagset["flag3"] = false
flagset["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 не должна иметь возможность получить истинное значение ни для одного из флагов.
Я знаю, что, устанавливая значения моей карты на false, я на самом деле не отменяю переданные значения командной строки, но как это сделать?
Есть ли способ Не посещать / Снять флаги командной строки в Golang? Любая помощь будет оценена по достоинству.
Спасибо.