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>
このカスタム タイプの実装では、
このカスタム 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>
この中で例:
以上がGo でコマンド ライン フラグ列挙の検証を単体テストする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。