Maison > développement back-end > Golang > Pourquoi mon test Go pour la transmission d'arguments à l'aide de « os.Args » échoue-t-il et comment puis-je y remédier ?

Pourquoi mon test Go pour la transmission d'arguments à l'aide de « os.Args » échoue-t-il et comment puis-je y remédier ?

Patricia Arquette
Libérer: 2024-12-09 06:27:06
original
667 Les gens l'ont consulté

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

Test de la réussite de l'argument dans Go

Problème :

Lors de la rédaction d'un test pour vérifier l'argument en passant Go en utilisant os.Args, cela entraîne un comportement inattendu où l'argument attendu n'est pas reçu par le fonction.

Extrait de code :

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)
    }
}
Copier après la connexion

Tentative :

Le test suivant échoue, indiquant que l'argument est ne pas être passé correctement :

--- FAIL: TestArgs (0.00s)
    args_test.go:15: Test failed, expected: 'bla', got:  'root'
FAIL
coverage: 87.5% of statements
FAIL    tool    0.008s
Copier après la connexion

Solution :

Le problème réside dans l'affectation de os.Args. La syntaxe doit être :

os.Args = []string{"cmd", "-user=bla"}
Copier après la connexion

De plus, il est recommandé de conserver la valeur d'origine de os.Args avant le test et de la restaurer par la suite :

oldArgs := os.Args
defer func() { os.Args = oldArgs }()
Copier après la connexion

Cela empêche d'autres tests d'être affecté par la modification de os.Args.

Explication :

La tranche os.Args est une "variable globale" qui contient les arguments d'origine transmis au programme. En attribuant une nouvelle tranche à os.Args, nous remplaçons effectivement les arguments d'origine. Le premier élément de os.Args est généralement le chemin d'accès à l'exécutable. En ajoutant "cmd" à la liste d'arguments, nous garantissons que la fonction reçoit la valeur d'argument correcte.

Restaurer la valeur d'origine de os.Args après le test est une bonne pratique pour maintenir un environnement cohérent pour les autres tests.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal