2016-03-06 37 views
6

我正在用Go开发一个Web应用程序。目前为止这么好,但现在我正在将Wercker作为CI工具并开始关注测试。但是我的应用很大程度上依赖于Cobra/Viper配置/ flags/environment_variables方案,并且我不知道如何在运行测试套件之前正确初始化Viper值。任何帮助将非常感激。Cobra + Viper Golang如何测试子命令?

回答

6

当我使用Cobra/Viper或CLI助手的任何其他组合时,我的做法是让CLI工具运行一个函数,其唯一目的是获取参数并将它们传递给另一个将执行实际工作。

下面是使用眼镜蛇短(和哑)例如:

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

这里,Boom功能难以测试,但boom一个是容易的。

您可以看到here(和相应的测试here)的另一个(非哑巴)示例。