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

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

Barbara Streisand
リリース: 2024-11-17 10:57:02
オリジナル
945 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート