Heim > Artikel > Backend-Entwicklung > Wie teste ich die Validierung der Befehlszeilen-Flag-Enumeration in Go?
Einheitentests von Befehlszeilen-Flags in Go
In Go erfordert die Definition benutzerdefinierter Flags für Befehlszeilenanwendungen einen gründlichen Testprozess, um sicherzustellen, dass sie funktionieren Richtigkeit. Ein spezifisches Szenario besteht darin, zu überprüfen, ob der Wert eines bestimmten Flags in eine vordefinierte Aufzählung fällt.
Code zum Testen
<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>
Testansatz
Um das gewünschte Verhalten einem Unit-Test zu unterziehen, können wir die Leistungsfähigkeit der flag.Var-Funktion nutzen, die es uns ermöglicht, benutzerdefinierte Typen und Validierungsregeln für Flags zu definieren.
<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>
In dieser benutzerdefinierten Typimplementierung :
Durch die Verwendung dieses benutzerdefinierten formatType-Flags kann der Testprozess nun das Verhalten des Flags validieren, wenn es auf verschiedene Werte eingestellt ist.
Beispieltest
<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>
In diesem Beispiel:
Das obige ist der detaillierte Inhalt vonWie teste ich die Validierung der Befehlszeilen-Flag-Enumeration in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!