ホームページ  >  記事  >  バックエンド開発  >  Go でカスタム コマンド ライン フラグの検証を単体テストする方法

Go でカスタム コマンド ライン フラグの検証を単体テストする方法

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-05 06:52:02365ブラウズ

How to Unit Test Custom Command Line Flag Validation in Go?

Go 単体テストでのコマンド ライン フラグの検証

コマンド ライン フラグを使用して形式の種類を構成する次のコードを考えてみましょう。

<code class="go">// ... elided for brevity ...</code>

-format フラグが期待値に設定されていることを確認するために、単体テストを作成できます。 flag.Var 関数を使用すると、フラグの処理をカスタマイズでき、フラグ値の検証や制御を強化できます。

カスタム フラグの処理は、Value インターフェイスを実装することで実現されます。

<code class="go">type formatType string

func (f *formatType) String() string {
    return fmt.Sprint(*f)
}

func (f *formatType) Set(value string) error {
    // Validation logic here
}</code>

これをフォーマット フラグに適用します:

<code class="go">var typeFlag formatType

func init() {
    // ... elided for brevity ...
    flag.Var(&typeFlag, "format", "Format type")
    flag.Var(&typeFlag, "f", "Format type (shorthand)")
}</code>

カスタム フラグ検証を単体テストするには、flag_test.go にある次のアプローチを検討してください:

<code class="go">func TestCustomFlag(t *testing.T) {
    // Setup test environment
    origArgs := os.Args

    // Define custom flag type
    type myFlag int
    flag.Var((*myFlag)(nil), "customflag", "Custom flag")

    tests := []struct {
        origArgs  []string
        expValue  int
        expOutput string
    }{
        // ... test cases ...
    }

    for _, test := range tests {
        os.Args = test.origArgs
        // Parse flags
        flag.Parse()
        // Check flag value
        if flagValue := flag.Lookup("customflag").Value.(myFlag); flagValue != test.expValue {
            t.Errorf("Expected %v, got %v", test.expValue, flagValue)
        }
        // Restore args
        os.Args = origArgs
    }
}</code>

要約すると、フラグは.Var 関数を使用すると、フラグ値のカスタマイズと検証が可能になり、確立されたパターンに従って単体テストできます。

以上がGo でカスタム コマンド ライン フラグの検証を単体テストする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。