登录
首页 >  Golang >  Go问答

测试中使用持久标志传递 Cobra CLI

来源:stackoverflow

时间:2024-02-07 14:03:22 132浏览 收藏

哈喽!大家好,很高兴又见面了,我是golang学习网的一名作者,今天由我给大家带来一篇《测试中使用持久标志传递 Cobra CLI》,本文主要会讲到等等知识点,希望大家一起学习进步,也欢迎大家关注、点赞、收藏、转发! 下面就一起来看看吧!

问题内容

我有一个用 cobra 编写的 cli 应用程序。该应用程序包含一个根命令rootcmd,其中包含两个persistentflags。其中一个持久标志称为 threads,其默认值为 1,缩写为 -h

    rootcmd.persistentflags().intvarp(&threads, "threads", "t", 1, "number of concurrent workers, using stdin overrides this flag")

persistentprerun 中,我检查该值是否设置为小于 1 以打印错误消息 threads can't be less than 1 并退出。

问题是我需要为应用程序编写一些测试,但找不到设置标志的方法。目前,我使用 os/exec 进行测试,这非常烦人,并且不提供代码覆盖率。

我正在尝试执行以下操作

func Test(t *testing.T) {
    root := cmd.RootCmd
    root.SetArgs([]string{"-t", "12"})
    // or even: root.SetArgs([]string{"-t 12"})
    root.Execute()
}

这将输出消息 error: unknown shorthand flag: 't' in -t 12。完全省略该标志并尝试使用任何子命令会显示错误消息,该值不能小于 1(请注意,我设置了默认值)。

除了 setargs 之外,还有其他方法可以设置标志或解决方法吗?


正确答案


我想我发现了问题。感谢 iarsks 提供的示例。

我以前的根有

func execute() {
    rootcmd.completionoptions.hiddendefaultcmd = true
    rootcmd.persistentflags().intvarp(&threads, "threads", "t", 1, "number of concurrent workers, using stdin overrides this flag")
    rootcmd.persistentflags().stringvarp(&delimiter, "delimiter", "d", ",", "choose delimiter")
    if err := rootcmd.execute(); err != nil {
        fmt.fprintf(os.stderr, "csvutil encountered an error while executing")
        os.exit(1)
    }
}

我把这个函数分成:

func init() {
    RootCmd.CompletionOptions.HiddenDefaultCmd = true
    RootCmd.PersistentFlags().IntVarP(&threads, "threads", "t", 1, "Number of concurrent workers, using Stdin overrides this flag")
    RootCmd.PersistentFlags().StringVarP(&delimiter, "delimiter", "d", ",", "Choose delimiter")
}

func Execute() {
    if err := RootCmd.Execute(); err != nil {
        fmt.Fprintf(os.Stderr, "csvutil encountered an error while executing")
        os.Exit(1)
    }
}

现在一切正常了。

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>