Cobra + Viper Golang Как проверить подкоманды?

Я разрабатываю веб-приложение с Go. Пока все хорошо, но теперь я интегрирую Wercker как инструмент CI и начал заботиться о тестировании. Но мое приложение сильно зависит от схемы Cobra/Viper configuration/flags / environment_variables, и я не знаю, как правильно ввести значения Viper перед запуском моего набора тестов. Любая помощь будет высоко ценится.

1 ответов


когда я использую 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 легко.

вы можете увидеть еще один (не тупой) пример здесь (и соответствующий тест здесь).