我正在使用Go开发Web应用程序。到目前为止一切顺利,但是现在我将Wercker集成为CI工具,并开始关心测试。但是我的应用程序严重依赖于Cobra / Viper配置/标志/ environment_variables方案,而且我不知道如何在运行测试套件之前正确初始化Viper值。任何帮助将非常感激。
当我使用Cobra / Viper或任何其他CLI帮助程序组合时,我的实现方式是让CLI工具运行一个函数,其唯一目的是获取参数并将其传递给将执行实际工作的另一种方法。
这是使用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) } }
在这里,该Boom功能很难测试,但是boom一个很简单。
Boom
boom
你可以看到这另一个(非哑)例子这里(和对应的测试在这里)。