go test -timeout 99999
抛出此无意义错误
invalid value "99999" for flag -test.timeout:
time: missing unit in duration 99999
是bug吗?我用的是go版本go1.3
“help”cli也没用。它说-test.timeout=0: if positive, sets an aggregate time limit for all tests
。但是如果你去测试-test.timeout99999,你会得到同样的错误
-test.timeout=0: if positive, sets an aggregate time limit for all tests
3条答案
按热度按时间eufgjt7s1#
请使用有效的
time.ParseDuration
输入。例如,Command go
测试标志
如果测试运行时间超过
t
,则panic
。Package flag
持续时间标志接受对
time.ParseDuration
有效的任何输入。Package time
函数分析持续时间
ParseDuration分析持续时间字符串。持续时间字符串可能是十进制数字的有符号序列,每个数字都带有可选的分数和单位后缀,如“
300ms
“、“-1.5h
“或“2h45m
“。有效的时间单位为“ns
“、“us
“(或“第一个月9日至1x日“)、“第一个月10日至1x日“、“第一个月11日至1x日“、”第一个月12日至1x日“、“第一个月13日至1x日“。wztqucjr2#
如果你只需要一个测试,你想很容易失败时,它超时有一个巧妙的方法,只是使用超时通道。
如果我怀疑一个测试会超时,但我仍然希望它失败,就使用超时通道。
所以,假设你有一段代码,你怀疑某些goroutine会死锁,你想确保你的测试在这一点上失败。
为此,我在一个goroutine中运行实际的测试,然后主goroutine等待
done
通道完成或者timeout
完成。9udxz4iz3#
要添加/更新Tigraine的answer,请执行以下操作:
如果你只需要一个测试,你想很容易失败时,它超时有一个巧妙的方法,只是使用超时通道。
实际上...... proposal/issue 48157 "
cmd/go
: add per-test timeouts",被接受并可能随Go 1.18(2022年第一季度)发布,将改变这一点。(也许Go 1.20,2022年第四季度)测试具有整个二进制文件的总超时,但没有特定测试用例的超时。
您经常希望将任何特定的测试用例限制在比整个二进制文件短得多的时间内。
我建议在go命令的用户体验中添加每个测试(函数)超时的概念,如下所示。
1.每个测试都有一个测试超时。
给定测试的计时器只在测试运行时才滴答作响。当测试在
t.Parallel
中被阻止时,它不会滴答作响,当它在t.Run
中运行子测试时也不会滴答作响。1.每个测试用例的默认超时时间为1分钟。
如果显式指定了新的
-testtimeout
标志,则会设置不同的默认值。如果省略了
-testtimeout
标志,但显式指定了-timeout
,那么也会设置默认值。这样,如果你有一个非常长的测试并使用go test -timeout=30m
,那么每种情况的超时不会在1分钟后启动并杀死它。1.有一个新的
testing.TB
方法SetTimeout(d time.Duration)
,它允许测试设置自己的超时。呼叫
SetTimeout
并不会重设计时器。如果测试执行30秒,然后呼叫t.SetTimeout(1*time.Second)
,它会因为逾时而被终止。子测试会继承以这种方式设定的逾时。(每个子测试都有自己的计时器。)当测试超时发生时,整个进程仍然会被终止。对此我们无能为力。但是失败确实说明了哪个测试函数超时了。
因此,现在(2021年11月)有CL 363134,作为一个例子:
internal/fuzz
:为fuzz目标的每个exec设置超时在模糊化和最小化期间,此变更会在每次执行模糊化目的时设定10秒的逾时。
2022年10月:CL 445597也引用了它。