Heim > Backend-Entwicklung > Golang > Warum schlägt mein Go-Test für die Argumentübergabe mit „os.Args' fehl und wie kann ich das Problem beheben?

Warum schlägt mein Go-Test für die Argumentübergabe mit „os.Args' fehl und wie kann ich das Problem beheben?

Patricia Arquette
Freigeben: 2024-12-09 06:27:06
Original
723 Leute haben es durchsucht

Why Does My Go Test for Argument Passing Using `os.Args` Fail, and How Can I Fix It?

Testen der Argumentübergabe in Go

Problem:

Beim Schreiben eines Tests zur Überprüfung des Arguments Die Übergabe von Go mithilfe von os.Args führt zu unerwartetem Verhalten, bei dem das erwartete Argument nicht von empfangen wird Funktion.

Codeausschnitt:

package main

import (
    "flag"
    "fmt"
    "testing"

    "os"
)

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
}

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

Versuch:

Der folgende Test schlägt fehl, was darauf hinweist, dass das Argument vorhanden ist nicht bestanden richtig:

--- FAIL: TestArgs (0.00s)
    args_test.go:15: Test failed, expected: 'bla', got:  'root'
FAIL
coverage: 87.5% of statements
FAIL    tool    0.008s
Nach dem Login kopieren

Lösung:

Das Problem liegt in der Zuweisung von os.Args. Die Syntax sollte wie folgt lauten:

os.Args = []string{"cmd", "-user=bla"}
Nach dem Login kopieren

Darüber hinaus wird empfohlen, den ursprünglichen Wert von os.Args vor dem Test beizubehalten und danach wiederherzustellen:

oldArgs := os.Args
defer func() { os.Args = oldArgs }()
Nach dem Login kopieren

Dies verhindert, dass andere Tests ausgeführt werden von der Änderung betroffen os.Args.

Erklärung:

Das os.Args-Slice ist eine „globale Variable“, die die ursprünglichen Argumente enthält, die an das Programm übergeben wurden. Indem wir os.Args ein neues Slice zuweisen, ersetzen wir effektiv die ursprünglichen Argumente. Das erste Element von os.Args ist normalerweise der Pfad zur ausführbaren Datei. Indem wir der Argumentliste „cmd“ voranstellen, stellen wir sicher, dass die Funktion den richtigen Argumentwert erhält.

Das Wiederherstellen des ursprünglichen Werts von os.Args nach dem Test ist eine gute Vorgehensweise, um eine konsistente Umgebung für andere Tests aufrechtzuerhalten.

Das obige ist der detaillierte Inhalt vonWarum schlägt mein Go-Test für die Argumentübergabe mit „os.Args' fehl und wie kann ich das Problem beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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