go test -timeout 99999
この無意味なエラーをスローします
invalid value "99999" for flag -test.timeout:
time: missing unit in duration 99999
バグですか? goバージョンgo1.3を使用しています
「ヘルプ」CLIも役に立たない。 -test.timeout=0: if positive, sets an aggregate time limit for all tests
。ただし、test -test.timeout 99999を実行すると、同じエラーが発生します
-test.timeout=0: if positive, sets an aggregate time limit for all tests
有効なtime.ParseDuration
入力を使用してください。例えば、
$ go test -timeout 300ms
$ go test -timeout 99999s
-timeout t
テストの実行時間が
t
、panic
よりも長い場合。期間フラグは、
time.ParseDuration
に有効な任意の入力を受け入れます。func ParseDuration(s string) (Duration, error)
ParseDurationは、期間文字列を解析します。期間文字列は、符号付きの10進数のシーケンスであり、それぞれにオプションの小数部と単位接尾辞が付いています(「
300ms
」、「-1.5h
」、「2h45m
」など)。有効な時間単位は「ns
」、「us
」(または「µs
」)、「ms
」、「s
」、 「m
」、「h
」。
タイムアウトしたときに簡単に失敗したい1つのテストだけにこれが必要な場合は、タイムアウトチャネルを使用するだけで適切な方法があります。
テストがタイムアウトすると思われ、それでも失敗したい場合は、タイムアウトチャネルを使用します。
したがって、いくつかのゴルーチンがデッドロックするのではないかと疑い、テストが失敗することを確認したいコードがあるとします。
そのため、私は実際のテストをゴルーチンで実行し、メインのゴルーチンは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:
}
}