Как проверить флаги CLI - в настоящее время происходит сбой с `flag redefined` - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть следующая функция, которую я пытаюсь проверить:

import (
    "github.com/spf13/pflag"
)

func parseCLIFlags() cliOptions {
    mode := pflag.StringP("mode", "m", "json", "file format")
    outType := pflag.StringP("out-type", "o", "stdout", "Output format")
    outFile := pflag.String("out-file", "", "Output file. Only used if `--out-type` is not stdout")
    inFiles := pflag.StringArrayP("file", "f", []string{}, "Files to compare. Use this flag multiple times, once for each file.")

    pflag.Parse()

    options := cliOptions{
        mode:    *mode,
        outType: *outType,
        outFile: *outFile,
        inFiles: *inFiles,
    }
    return options
}

, и я пытаюсь проверить следующие тесты:

func TestFlagsAreParsedCorrectly(t *testing.T) {
    os.Args = []string{"schmp", "-f", "testdata/yaml/yaml_1.yaml", "--file", "testdata/yaml/yaml_2.yaml", "--mode", "yaml", "-o", "json", "--out-file", "sample.json"}
    cliOptions := parseCLIFlags()
    if cliOptions.mode != "yaml" {
        t.Fatalf("could not set mode")
    }
    if cliOptions.outType != "json" {
        t.Fatalf("could not set outType")
    }
    if cliOptions.outFile != "sample.json" {
        t.Fatalf("could not set outFile")
    }
    if !reflect.DeepEqual(cliOptions.inFiles, []string{"testdata/yaml/yaml_1.yaml", "testdata/yaml/yaml_2.yaml"}) {
        fmt.Println("could not set inFiles")
    }
}

func TestCheckDefaultFlags(t *testing.T) {
    os.Args = []string{"schmp"}
    cliOptions := parseCLIFlags()
    if cliOptions.mode != "json" {
        t.Fatalf("default mode is not `json`")
    }
}

Но мои тесты запаниковали с помощью flag redefined: mode

Есть идеи, как я могу это исправить, чтобы я мог проверить?

1 Ответ

0 голосов
/ 14 апреля 2020

Согласно комментарию @Adrian, я смог исправить это, создав FlagSet in parseCLIFlags:

func parseCLIFlags() cliOptions {
    flag := pflag.FlagSet{}
    mode := flag.StringP("mode", "m", "json", "file format")
    outType := flag.StringP("out-type", "o", "stdout", "Output format")
    outFile := flag.String("out-file", "", "Output file. Only used if `--out-type` is not stdout")
    inFiles := flag.StringArrayP("file", "f", []string{}, "Files to compare. Use this flag multiple times, once for each file.")
    flag.Parse(os.Args[1:])

    options := cliOptions{
        mode:    *mode,
        outType: *outType,
        outFile: *outFile,
        inFiles: *inFiles,
    }
    return options
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...