golang flag 单元测试跑不过

2022-01-04 12:10:42 +08:00
 spotfg

求助,怎么修改我的测试文件或者执行命令可以跑通 TestExecute

执行命令:go test -run TestExecute -args -s qqqqq
输出结果:

$ go test -run TestExecute -args -s qqqqq
flag provided but not defined: -s
Usage of C:\Users\xxx\AppData\Local\Temp\go-build2919206642\b001\ptest.test.exe:
  -test.bench regexp
        run only benchmarks matching regexp
  -test.benchmem
        print memory allocations for benchmarks
  -test.benchtime d
  ...

代码如下:

// main.go


package main

import (
	"flag"
	"fmt"
)

func main() {
	// 其他处理逻辑
	Execute()
    // 其他处理逻辑
}

func Execute() {
	s := flag.String("s", "abc", "xxxxxx")

	fmt.Println(*s)
    
    // 对得到参数的处理
}

// m_test.go

package main

import "testing"

func TestExecute(t *testing.T) {
	Execute()

}


1444 次点击
所在节点    Go 编程语言
10 条回复
smilekung
2022-01-04 13:56:46 +08:00
根据文档 test 时 flag.Parse 并没有被调用 需要在 test 方法里显式调用
meiyoumingzi6
2022-01-04 14:07:32 +08:00
```golang
package main

import (
"flag"
"fmt"
)

func main() {
// 其他处理逻辑
Execute()
// 其他处理逻辑
}

func Execute() {
s := flag.String("s", "abc", "xxxxxx")
flag.Parse() // 加上这行
fmt.Println(*s)
// 对得到参数的处理
}

```
MoYi123
2022-01-04 14:26:17 +08:00
func TestMain(m *testing.M) {
Execute()
}


建议还是在 main 里把参数全部解析出了,通过参数传入 execute 比较好
FrankFang128
2022-01-04 14:31:03 +08:00
如 3 楼所说 +1
spotfg
2022-01-04 15:04:59 +08:00
@meiyoumingzi6 我试了下,不行,仍然报错了无法携带参数
spotfg
2022-01-04 15:06:22 +08:00
@MoYi123 确实是好点,但是这老项目改起来就有点不太敢动
spotfg
2022-01-04 15:09:41 +08:00
@smilekung google 搜出来也是这样说,可惜不对,不是我这种情况,我需要通过命令行传参。不传参是可以跑的通的
MoYi123
2022-01-04 15:10:06 +08:00
@spotfg
func TestMain(m *testing.M) {
Execute()
}

这样写就能跑了
spotfg
2022-01-04 15:12:39 +08:00
@MoYi123 噢!确实!强啊!淦,翻了一大堆东西,都是说要 parse 前 testing.Init(), 但是都试了。文档翻了一遍又一遍,累了
smilekung
2022-01-04 16:58:24 +08:00
#8  大佬 看了下 报错的核心问题是 在 flag.parse 时 flag 还没有被定义,改为 testing.m 只有 如果不执行 m.run 是不会进行 flag.prase 的,所以还有种改法就是把 flag 定义提前

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/826066

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX