2016-03-06 79 views
6

Sto sviluppando un'app Web con Go. Fin qui tutto bene, ma ora sto integrando Wercker come strumento di configurazione e ho iniziato a occuparmi dei test. Ma la mia app fa molto affidamento sullo schema di configurazione/flag/environment_variables di Cobra/Viper e non so come inizializzare correttamente i valori di Viper prima di eseguire la mia suite di test. Qualsiasi aiuto sarebbe molto apprezzato.Cobra + Viper Golang Come testare i sottocomandi?

risposta

6

Quando uso Cobra/Viper o qualsiasi altra combinazione di helper CLI, il mio modo di fare ciò è di fare in modo che lo strumento CLI esegua una funzione il cui unico scopo sarà quello di ottenere argomenti e passarli ad un altro metodo che eseguirà il lavoro reale.

Ecco un breve esempio (e dumb) utilizzando Cobra:

package main 

import (
     "fmt" 
     "os" 

     "github.com/spf13/cobra" 
) 

func main() { 
     var Cmd = &cobra.Command{ 
       Use: "boom", 
       Short: "Explode all the things!", 
       Run: Boom, 
     } 

     if err := Cmd.Execute(); err != nil { 
       fmt.Println(err) 
       os.Exit(-1) 
     } 
} 

func Boom(cmd *cobra.Command, args []string) { 
     boom(args...) 
} 

func boom(args ...string) { 
     for _, arg := range args { 
       println("boom " + arg) 
     } 
} 

Qui, la funzione Boom è difficile da testare, ma il boom uno è facile.

È possibile visualizzare un altro esempio (non stupido) di questo here (e il test corrispondente here).