go test -timeout 99999
抛出此无意义错误
invalid value "99999" for flag -test.timeout:
time: missing unit in duration 99999
这是一个错误吗? 我正在使用 去版本go1.3
"帮助" cli也没用。它说-test.timeout=0: if positive, sets an aggregate time limit for all tests
。但是,如果你去测试-test.timeout 99999,你会得到同样的错误
-test.timeout=0: if positive, sets an aggregate time limit for all tests
答案 0 :(得分:40)
使用有效的time.ParseDuration
输入。例如,
$ go test -timeout 300ms
$ go test -timeout 99999s
-timeout t
如果测试的运行时间超过
t
,panic
。持续时间标志接受对
time.ParseDuration
有效的任何输入。func ParseDuration(s string) (Duration, error)
ParseDuration解析持续时间字符串。持续时间字符串是a 可能签名的十进制数序列,每个都有可选的 分数和单位后缀,例如"
300ms
","-1.5h
"或"2h45m
"。有效 时间单位为"ns
","us
" (或"µs
"),"ms
","s
"," { {1}}","m
"。
答案 1 :(得分:1)
如果您只想在一次测试中使用此功能,则希望在超时时很容易失败,这是使用超时通道的一种巧妙方法。
如果我怀疑测试会超时,但我仍然希望它失败,那就是使用超时通道。
因此,假设您有代码怀疑某些goroutine会死锁,并希望确保测试无法通过该代码。
为此,我在goroutine中运行实际测试,然后主goroutine围着等待done
通道完成或timeout
完成。
func TestWithTimeOut(t *testing.T) {
timeout := time.After(3 * time.Second)
done := make(chan bool)
go func() {
// do your testing
time.Sleep(5 * time.Second)
done <- true
}()
select {
case <-timeout:
t.Fatal("Test didn't finish in time")
case <-done:
}
}