Maison > Article > développement back-end > Comment tester unitairement la validation des indicateurs de ligne de commande personnalisés dans 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!