Golang Go语言 flag 单元测试跑不过
Golang Go语言 flag 单元测试跑不过
求助,怎么修改我的测试文件或者执行命令可以跑通 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()
}
更多关于Golang Go语言 flag 单元测试跑不过的实战教程也可以访问 https://www.itying.com/category-94-b0.html
根据文档 test 时 flag.Parse 并没有被调用 需要在 test 方法里显式调用
更多关于Golang Go语言 flag 单元测试跑不过的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
golang<br>package main<br><br>import (<br> "flag"<br> "fmt"<br>)<br><br>func main() {<br> // 其他处理逻辑<br> Execute()<br> // 其他处理逻辑<br>}<br><br>func Execute() {<br> s := flag.String("s", "abc", "xxxxxx")<br> flag.Parse() // 加上这行<br> fmt.Println(*s)<br> // 对得到参数的处理<br>}<br><br>
func TestMain(m *testing.M) {
Execute()
}
建议还是在 main 里把参数全部解析出了,通过参数传入 execute 比较好
如 3 楼所说 +1
我试了下,不行,仍然报错了无法携带参数
确实是好点,但是这老项目改起来就有点不太敢动
google 搜出来也是这样说,可惜不对,不是我这种情况,我需要通过命令行传参。不传参是可以跑的通的
func TestMain(m *testing.M) {
Execute()
}
这样写就能跑了
噢!确实!强啊!淦,翻了一大堆东西,都是说要 parse 前 testing.Init(), 但是都试了。文档翻了一遍又一遍,累了
#8 大佬 看了下 报错的核心问题是 在 flag.parse 时 flag 还没有被定义,改为 testing.m 只有 如果不执行 m.run 是不会进行 flag.prase 的,所以还有种改法就是把 flag 定义提前
针对你提到的“Golang Go语言 flag 单元测试跑不过”的问题,这里有几个可能的解决方向和检查点:
-
检查测试代码:
- 确保你的测试代码中正确使用了
flag.Parse()
。通常,在测试使用flag
包的程序时,需要在测试函数或init
函数中显式调用flag.Parse()
,以便在测试执行前解析命令行参数。
- 确保你的测试代码中正确使用了
-
模拟命令行参数:
- 如果你的程序依赖于命令行参数,你可能需要在测试中使用
os.Args
来模拟这些参数。例如,在测试函数设置os.Args = []string{"cmd", "arg1", "arg2"}
,然后调用flag.Parse()
。
- 如果你的程序依赖于命令行参数,你可能需要在测试中使用
-
使用
testing
包的特性:- 利用
testing.T
的Cleanup
函数来确保在每个测试后恢复os.Args
的原始状态,避免测试间的相互影响。
- 利用
-
检查依赖和环境:
- 确保所有依赖项都已正确安装,并且测试环境(如Go版本、操作系统等)与你的开发环境一致。
-
查看错误输出:
- 仔细查看测试失败时的错误输出和堆栈跟踪,这通常会提供关于问题所在的直接线索。
-
查阅文档和社区:
- 查阅Go语言的官方文档和社区论坛,看看是否有其他人遇到过类似的问题,并找到了解决方案。
希望这些建议能帮助你解决单元测试失败的问题。如果问题依旧存在,请提供更详细的错误信息和代码片段,以便进一步分析。