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