Go でコマンド ライン フラグを単体テストする方法
概要:
単体テストはこれは、コマンド ライン フラグの処理を含め、コードの信頼性と正確性を確保するために非常に重要です。フラグの解析は Go アプリケーションの一般的なタスクであり、フラグが正しく検証されていることを確認することが不可欠です。この記事では、Go でコマンド ライン フラグを単体テストする方法について説明します。
単体テストのセットアップ:
単体テストのフラグ検証を行うには、カスタム フラグを作成します。フラグの値が予期された列挙内にあるかどうかをチェックするフラグ タイプ。次のコード例を考えてみましょう:
<code class="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)") }</code>
カスタム フラグの検証:
カスタム フラグを定義できます。形式フラグを検証する値の型:
<code class="go">type formatType string func (f *formatType) String() string { return fmt.Sprint(*f) } func (f *formatType) Set(value string) error { if len(*f) > 0 && *f != "text" { return errors.New("format flag already set") } if value != "text" && value != "json" && value != "hash" { return errors.New("Invalid Format Type") } *f = formatType(value) return nil }</code>
単体テストの作成:
次に、カスタム フラグの検証を検証する単体テストを作成しましょう:
<code class="go">func TestValidateFormatFlag(t *testing.T) { testCases := []struct { input string expected error }{ {"text", nil}, {"json", nil}, {"hash", nil}, {"invalid", errors.New("Invalid Format Type")}, } for _, tc := range testCases { args := []string{"-format", tc.input} os.Args = args typeFlag = "text" flag.CommandLine = flag.NewFlagSet("test", flag.ContinueOnError) flag.Var(&typeFlag, "format", "Format type. Must be \"text\", \"json\" or \"hash\". Defaults to \"text\".") if err := flag.CommandLine.Parse(args[1:]); err != nil { t.Errorf("Error parsing flags: %v", err) } if tc.expected != nil && err == nil { t.Errorf("Expected error: %v, got nil", tc.expected) } else if tc.expected == nil && err != nil { t.Errorf("Unexpected error: %v", err) } } }</code>
このテストでは、さまざまな入力と予想されるエラーを含む一連のテスト ケースを設定します。 os.Args を使用してコマンド ライン引数をモックし、カスタム FlagSet を使用してフラグを解析します。実際のエラーと各テスト ケースの予想されるエラーを比較することで、フラグ検証が意図したとおりに機能することを確認します。
フラグ テストを実行するためのヒント:
結論:
カスタム フラグ タイプを実装し、単体テストを作成することで、Go でコマンド ライン フラグを効果的に検証できます。この実践は、アプリケーションの信頼性と堅牢性を維持するのに役立ちます。
以上がGo でコマンド ライン フラグの検証を単体テストする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。