Validieren von Befehlszeilenflags in Go-Unit-Tests
Betrachten Sie den folgenden Code, der Befehlszeilenflags verwendet, um den Formattyp zu konfigurieren:
<code class="go">// ... elided for brevity ...</code>
Um sicherzustellen, dass das Flag -format auf einen erwarteten Wert gesetzt ist, kann ein Komponententest geschrieben werden. Die Funktion flag.Var kann verwendet werden, um die Verarbeitung von Flags anzupassen und so eine Validierung und mehr Kontrolle über die Flag-Werte zu ermöglichen.
Die benutzerdefinierte Flag-Verarbeitung wird durch die Implementierung der Value-Schnittstelle erreicht:
<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>
Anwenden auf das Format-Flag:
<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>
Um die benutzerdefinierte Flag-Validierung einem Unit-Test zu unterziehen, berücksichtigen Sie den folgenden Ansatz in 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>
Zusammenfassend lässt sich sagen, dass die Funktion flag.Var die Anpassung und Validierung von Flag-Werten ermöglicht, die nach festgelegten Mustern einem Unit-Test unterzogen werden können.
Das obige ist der detaillierte Inhalt vonWie teste ich die Validierung benutzerdefinierter Befehlszeilen-Flags in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!