Maison >développement back-end >Golang >Comment tester correctement la transmission d'arguments dans Golang ?

Comment tester correctement la transmission d'arguments dans Golang ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-07 17:34:13850parcourir

How to Correctly Test Argument Passing in Golang?

Test de la transmission des arguments dans Golang

Dans Golang, les arguments peuvent être transmis aux fonctions à l'aide de drapeaux. Pour tester la transmission d'arguments, un test peut être écrit qui simule la transmission d'arguments de ligne de commande.

Le problème

Lors de l'exécution du test suivant :

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

le test échoue avec un message d'erreur indiquant que le résultat attendu ("bla") ne correspond pas au résultat réel ("root").

La solution

Le problème se pose car la première valeur dans os.Args est le chemin d'accès à l'exécutable lui-même. Pour résoudre ce problème, la tranche os.Args doit être mise à jour pour inclure à la fois l'exécutable et l'argument :

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

De plus, os.Args est une variable globale, il est donc recommandé de sauvegarder l'état d'origine et restaurez-le après le test pour éviter toute interférence avec d'autres tests :

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

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!

Déclaration:
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