如何在 Go 中对命令行标志进行单元测试?

我想要一个单元测试来验证特定的命令行标志是否在枚举中。


这是我想针对其编写测试的代码:


var formatType string


const (

    text = "text"

    json = "json"

    hash = "hash"

)


func init() {

    const (

        defaultFormat = "text"

        formatUsage   = "desired output format"

    )


    flag.StringVar(&formatType, "format", defaultFormat, formatUsage)

    flag.StringVar(&formatType, "f", defaultFormat, formatUsage+" (shorthand)")


}


func main() {

    flag.Parse()

}

只有当 -format 等于上面给出的 const 值之一时,所需的测试才会通过。此值将在 formatType 中可用。一个正确的调用示例是: program -format text


测试所需行为的最佳方法是什么?


注意:也许我的措辞不好,但显示的代码不是单元测试本身,而是我想针对其编写单元测试的代码。这是我正在编写的工具中的一个简单示例,想询问是否有一种好方法来测试该工具的有效输入。


梦里花落0921
浏览 201回答 2
2回答

www说

我不确定我们是否同意术语“单元测试”。在我看来,您想要实现的目标更像是程序中的一个非常正常的测试。你可能想做这样的事情:func main() {    flag.Parse()    if formatType != text || formatType != json || formatType != hash {        flag.Usage()        return    }    // ...}有关定义自定义格式类型及其验证器的解决方案,请参阅 Internet。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go