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

Go でコマンド ライン フラグ列挙の検証を単体テストする方法は?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-17 10:57:02890ブラウズ

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

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

Go では、コマンド ライン アプリケーションのカスタム フラグを定義するには、そのフラグが確実に機能することを確認するための徹底的なテスト プロセスが必要です。正しさ。 1 つの具体的なシナリオには、特定のフラグの値が事前定義された列挙内に含まれるかどうかの検証が含まれます。

テストするコード

<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)")
}

func main() {
    flag.Parse()
}</code>

テストのアプローチ

目的の動作を単体テストするには、flag.Var 関数の機能を活用できます。これにより、フラグのカスタム タイプと検証ルールを定義できます。

<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>

このカスタム タイプの実装では、

  • String() は、フラグの現在の値を文字列形式で返します。 .
  • Set() はフラグの値を更新し、それが許可された範囲内に収まるようにします。 enumeration.

このカスタム formatType フラグを採用することで、テスト プロセスは、さまざまな値に設定されたときのフラグの動作を検証できるようになりました。

テスト例

<code class="go">package main

import "testing"

func TestFormatType(t *testing.T) {
    tests := []struct {
        args   []string
        expect string
    }{
        {[]string{"-format", "text"}, "text"},
        {[]string{"-f", "json"}, "json"},
        {[]string{"-format", "foo"}, "Invalid Format Type"},
    }

    for _, test := range tests {
        t.Run(test.args[0], func(t *testing.T) {
            flag.Parse()
            if typeFlag != test.expect {
                t.Errorf("Expected %s got %s", test.expect, typeFlag)
            }
        })
    }
}</code>

この中で例:

  • TestFormatType はテストのリストを反復処理します。
  • 各テストはコマンドライン引数を設定し、フラグを解析し、結果の typeFlag 値を期待される結果と比較します。
  • テストが失敗すると、エラーが報告されます。

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

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