Maison  >  Article  >  développement back-end  >  Comment tester unitairement la validation des indicateurs de ligne de commande personnalisés dans Go ?

Comment tester unitairement la validation des indicateurs de ligne de commande personnalisés dans Go ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-05 06:52:02364parcourir

How to Unit Test Custom Command Line Flag Validation in Go?

Validation des indicateurs de ligne de commande dans les tests unitaires Go

Considérez le code suivant qui utilise des indicateurs de ligne de commande pour configurer le type de format :

<code class="go">// ... elided for brevity ...</code>

Pour garantir que l'indicateur -format est défini sur une valeur attendue, un test unitaire peut être écrit. La fonction flag.Var peut être utilisée pour personnaliser le traitement des indicateurs, permettant une validation et un meilleur contrôle sur les valeurs des indicateurs.

La gestion des indicateurs personnalisés est obtenue en implémentant l'interface Value :

<code class="go">type formatType string

func (f *formatType) String() string {
    return fmt.Sprint(*f)
}

func (f *formatType) Set(value string) error {
    // Validation logic here
}</code>

Appliquer ceci au drapeau de format :

<code class="go">var typeFlag formatType

func init() {
    // ... elided for brevity ...
    flag.Var(&typeFlag, "format", "Format type")
    flag.Var(&typeFlag, "f", "Format type (shorthand)")
}</code>

Pour tester unitairement la validation du drapeau personnalisé, considérez l'approche suivante trouvée dans flag_test.go :

<code class="go">func TestCustomFlag(t *testing.T) {
    // Setup test environment
    origArgs := os.Args

    // Define custom flag type
    type myFlag int
    flag.Var((*myFlag)(nil), "customflag", "Custom flag")

    tests := []struct {
        origArgs  []string
        expValue  int
        expOutput string
    }{
        // ... test cases ...
    }

    for _, test := range tests {
        os.Args = test.origArgs
        // Parse flags
        flag.Parse()
        // Check flag value
        if flagValue := flag.Lookup("customflag").Value.(myFlag); flagValue != test.expValue {
            t.Errorf("Expected %v, got %v", test.expValue, flagValue)
        }
        // Restore args
        os.Args = origArgs
    }
}</code>

En résumé, le drapeau La fonction .Var permet la personnalisation et la validation des valeurs d'indicateur, qui peuvent être testées unitairement selon des modèles établis.

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