Maison > développement back-end > Golang > le corps du texte

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

Patricia Arquette
Libérer: 2024-11-05 06:52:02
original
376 Les gens l'ont consulté

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

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

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

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

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!

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!