Heim >Backend-Entwicklung >Golang >Wie teste ich die Argumentübergabe in Go richtig?

Wie teste ich die Argumentübergabe in Go richtig?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-15 06:48:14874Durchsuche

How to Correctly Test Argument Passing in Go?

Argumentübergabe in Golang testen

Betrachten Sie den folgenden Code:

package main

import (
    "flag"
    "fmt"
)

func main() {
    passArguments()
}

func passArguments() string {
    username := flag.String("user", "root", "Username for this server")
    flag.Parse()
    fmt.Printf("Your username is %q.", *username)

    usernameToString := *username
    return usernameToString
}

Wir übergeben ein Argument an den kompilierten Code Code mit dem Befehl:

./args -user=bla

Dies zeigt Folgendes an Ausgabe:

Your username is "bla"

Testansatz

Um die manuelle Kompilierung und Ausführung zu vermeiden, möchten wir einen Test schreiben, der das Übergeben von Argumenten überprüft. Wir erstellen eine Testfunktion:

func TestArgs(t *testing.T) {
    expected := "bla"
    os.Args = []string{"-user=bla"}

    actual := passArguments()

    if actual != expected {
        t.Errorf("Test failed, expected: '%s', got:  '%s'", expected, actual)
    }
}

Problem

Wenn wir den Test ausführen, stoßen wir auf ein unerwartetes Ergebnis:

Your username is "root".Your username is "root".--- FAIL: TestArgs (0.00s)
    args_test.go:15: Test failed, expected: 'bla', got:  'root'
FAIL
coverage: 87.5% of statements
FAIL    tool    0.008s

Das Das Argument „bla“ wird nicht an die Funktion übergeben, was dazu führt, dass „root“ angezeigt wird Benutzername.

Lösung

Das Problem liegt in der Einstellung von os.Args. Das erste Argument in os.Args ist der Pfad zur ausführbaren Datei selbst. Um dies zu beheben, ändern wir es wie folgt:

os.Args = []string{"cmd", "-user=bla"}

Außerdem empfiehlt es sich, den ursprünglichen os.Args-Status zu speichern und ihn nach dem Test für andere Tests wiederherzustellen, die auf den richtigen Argumenten basieren.

Das obige ist der detaillierte Inhalt vonWie teste ich die Argumentübergabe in Go richtig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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