Wie teste ich die Validierung benutzerdefinierter Befehlszeilen-Flags in Go?

Patricia Arquette
Freigeben: 2024-11-05 06:52:02
Original
375 Leute haben es durchsucht

How to Unit Test Custom Command Line Flag Validation in Go?

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!