Пользовательские флаги командной строки в модульных тестах 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