Пользовательские флаги командной строки в модульных тестах Go

приложение модульную. Есть куча тестов, которые используют набор модулей приложения, каждый тест требует другого набора. Некоторые модули настраиваются через командную строку, e.g:

func init() {
    flag.StringVar(&this.customPath, "gamedir.custom", "", "Custom game resources directory")
}

но я не могу проверить эту функцию. Если я побегу

go test -test.v ./... -gamedir.custom=c:/resources

среда выполнения отвечает с

flag provided but not defined: -gamedir.custom

и не проходит тест.

что я делаю неправильно с тестированием args командной строки?

3 ответов


Я думаю, что я понял, что не так с флагами в моем случае. Со следующей командой

go test -test.v ./... -gamedir.custom=c:/resources

компилятор работает один или несколько тесты на рабочую область. В моем конкретном случае есть несколько тестов, потому что ./... значит найти и создать тестовый исполняемый файл для каждого _test.файл найден. Тестовый исполняемый файл применяет все дополнительные параметры если только один или некоторые из них не игнорируются в нем. Таким образом, тестовые исполняемые файлы, которые используют param Пройди тест, все остальные провалятся. Это может быть переопределено путем запуска go test для каждого теста.идти отдельно, с соответствующим набором параметров соответственно.


вы также получите это сообщение, если вы поместите свои объявления флага внутри теста. Не делайте этого:

func TestThirdParty(t *testing.T) {
    foo := flag.String("foo", "", "the foobar bang")
    flag.Parse()
}

вместо этого используйте функцию init:

var foo string
func init() {
    flag.StringVar(&foo, "foo", "", "the foo bar bang")
    flag.Parse()
}

func TestFoo() {
    // use foo as you see fit...
}

принятый ответ, я обнаружил, был не совсем ясен. Чтобы передать параметр тесту (без ошибки), вы должны сначала использовать этот параметр, используя флаг. Для приведенного выше примера, где gamedir.custom-это переданный флаг, который вы должны иметь в своем тестовом файле

var gamedir *string = flag.String("gamedir.custom", "", "Custom gamedir.")

на TestMain