一尘不染

Cobra + Viper Golang如何测试子命令?

go

我正在使用Go开发Web应用程序。到目前为止一切顺利,但是现在我将Wercker集成为CI工具,并开始关心测试。但是我的应用程序严重依赖于Cobra /
Viper配置/标志/ environment_variables方案,而且我不知道如何在运行测试套件之前正确初始化Viper值。任何帮助将非常感激。


阅读 235

收藏
2020-07-02

共1个答案

一尘不染

当我使用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一个很简单。

你可以看到这另一个(非哑)例子这里(和对应的测试在这里)。

2020-07-02