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

Wie teste ich die Argumentübergabe in Golang richtig?

Susan Sarandon
Susan SarandonOriginal
2024-12-07 17:34:13850Durchsuche

How to Correctly Test Argument Passing in Golang?

Argumentübergabe in Golang testen

In Golang können Argumente mithilfe von Flags an Funktionen übergeben werden. Um die Übergabe von Argumenten zu testen, kann ein Test geschrieben werden, der die Übergabe von Befehlszeilenargumenten simuliert.

Das Problem

Beim Ausführen des folgenden Tests:

import (
    "os"
    "testing"
)

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)
    }
}

Der Test schlägt mit einer Fehlermeldung fehl, die darauf hinweist, dass das erwartete Ergebnis („bla“) nicht mit dem tatsächlichen Ergebnis übereinstimmt ("root").

Die Lösung

Das Problem entsteht, weil der erste Wert in os.Args der Pfad zur ausführbaren Datei selbst ist. Um dies zu beheben, sollte das os.Args-Slice so aktualisiert werden, dass es sowohl die ausführbare Datei als auch das Argument enthält:

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

Außerdem ist os.Args eine globale Variable, daher wird empfohlen, den ursprünglichen Zustand zu speichern und Stellen Sie es nach dem Test wieder her, um Störungen mit anderen Tests zu vermeiden:

oldArgs := os.Args
defer func() { os.Args = oldArgs }()

Das obige ist der detaillierte Inhalt vonWie teste ich die Argumentübergabe in Golang 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