gpt4 book ai didi

golang 测试命令行参数

转载 作者:IT王子 更新时间:2023-10-29 01:25:48 25 4
gpt4 key购买 nike

我想测试传递给我的 CLI 程序的不同(正确/不正确)命令行参数,但我不确定如何使用 go/testing 包实现这一点,因为我收到了 flag redefined 错误.看起来是因为 flag.Parse() 只能调用一次。测试传递给 go 程序的不同命令行参数的正确方法是什么?有什么方法可以定义诸如 setup()/teardown() 之类的东西,或者单独运行每个案例(但在同一个文件中)?

这是我的代码:

要测试的函数:

func (p *Params) Parse() (*Params, error) {
param1Ptr := flag.String("param1", "default", "param1 desc")
param2Ptr := flag.String("param2", "default", "param1 desc")
...
...
flag.Parse()
...

}

测试文件:

主要包

import (
"os"
"testing"
)


func TestParam1(t *testing.T) {
os.Args = []string{"cmd", "-param1", "incorrect", "-param2", "correct"}
params := Params{}
_, err := params.Parse()
...
...
}

func TestParam2(t *testing.T) {
os.Args = []string{"cmd", "-param1", "correct", "-param2", "incorrect"}
params := Params{}
_, err := params.Parse()
...
...
}

最佳答案

不要在flags 包中使用全局FlagSet 对象。创建您自己的 FlagSet 作为 Params 的字段:https://golang.org/pkg/flag/#FlagSet

flag.String 等所做的一切都是通过函数调用传递给 flag 包中的全局 FlagSet 对象(特别是 flag.CommandLine 是变量)。这很容易使用,但通常不是一个好的做法。使用您自己的标志集可以避免您描述的问题以及使用全局变量的其他潜在副作用。

关于golang 测试命令行参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53706935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com