Я хотел бы, чтобы единичный тест, который проверяет определенный флаг командной строки, находится в перечислении.Как модулировать флаги командной строки в Go?
Вот код, который я хотел бы писать тесты против:
var formatType string
const (
text = "text"
json = "json"
hash = "hash"
)
func init() {
const (
defaultFormat = "text"
formatUsage = "desired output format"
)
flag.StringVar(&formatType, "format", defaultFormat, formatUsage)
flag.StringVar(&formatType, "f", defaultFormat, formatUsage+" (shorthand)")
}
func main() {
flag.Parse()
}
Нужный тест будет проходить только если -format равен одному из константных значений, приведенных выше. Это значение будет доступно в формате Format. Примером правильного вызова будет: program -format text
Каков наилучший способ проверить желаемое поведение?
Примечание: Возможно, я сформулировал это плохо, но отображаемый код не является самотестированием, а кодом, с которым я хочу написать модульные тесты. Это простой пример из инструмента, который я пишу, и хотел спросить, есть ли хороший способ проверить правильные входные данные для инструмента.
IMHO это _not_ единичный тест: это просто какой-то простой код, который запускается после разбора флагов командной строки. «Модульные тесты» в Go написаны вместе с тестовым пакетом, см. Http://golang.org/doc/code.html#Testing, но эти тесты не запускаются во время запуска вашего приложения. Как насчет простого 'if formatType! = Text && ..&& foramtType! = "hash" {log.Fatalf ("Вы узнаете, прочитайте man-страницу ...")} '? – Volker
То, что показано, это не сам тест блока, а код, с которого я хочу выполнить модульные тесты. – KevDog
Оба ответа показывают вам способ тестирования тестовых флагов. В чем проблема с этим? – nemo