首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cobra:如何在测试中以编程方式设置标志

Cobra:如何在测试中以编程方式设置标志
EN

Stack Overflow用户
提问于 2018-04-16 02:35:12
回答 1查看 4.6K关注 0票数 5

我正在使用cobra构建一个CLI,并希望模拟使用不同的选项/标志集运行的命令。我一直在试图弄清楚如何使用眼镜蛇API在我的测试中设置标志,但还没有真正得到它。

我有这个:

代码语言:javascript
复制
// NewFooCmd returns a cobra.Command fitted to print output to the buffer for easier testing.
buf := &bytes.Buffer{}
cmd := package.NewFooCmd(buf)

cmd.Execute()

// some validations on the content of buf

到目前为止,我发现的最接近的事情是:

cmd.Flags().Set(name string, value string)

...but --这似乎不对,因为虽然标志的名称都是字符串,但它们并不都将字符串作为值。而且,即使我有一个int标志并传递string(1),它似乎也不起作用。

这里有什么很简单的东西吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-15 18:03:49

为此,您可以使用(c *Command) SetArgs(a []string) 函数。您的一些参数是整数或布尔值,这在这里并不重要-毕竟,这就是用户将在命令行中输入的内容!

在开发测试时,可以使用(c *Command) DebugFlags() 函数,以确保正在传递的标志也被正确地插入。

我与眼镜蛇的集成测试最终结果是这样的:

代码语言:javascript
复制
...

cmd := cli.RootCmd()
buf := new(bytes.Buffer)
cmd.SetOutput(buf)
cmd.SetArgs([]string{
    "--some-flag",
    fmt.Sprintf("--some-string=%s", value),
    fmt.Sprintf("--some-integer=%d", integer),
})
err := cmd.Execute()

...
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49848898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档