Как установить флаг тайм-аута go на "Go test"
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.timeout 99999, вы получите ту же ошибку
-test.timeout=0: if positive, sets an aggregate time limit for all tests
Ответы
Ответ 1
Используйте допустимый ввод времени. time.ParseDuration
. Например,
$ go test -timeout 300ms
$ go test -timeout 99999s
Команда идти
Флаги тестирования
-timeout t
Если тест выполняется дольше, чем t
, panic
.
Флаг упаковки
Флаги продолжительности принимают любой ввод, действительный для time.ParseDuration
. time.ParseDuration
.
Время пакета
func ParseDuration
func ParseDuration(s string) (Duration, error)
ParseDuration анализирует строку продолжительности. Строка длительности является возможно подписана последовательность десятичных чисел, каждая с дополнительной фракции и суффикса единицы, такие как " 300ms
", " -1.5h
" или " 2h45m
". Допустимые единицы времени: " ns
", " us
" (или " µs
"), " ms
", " s
", " m
", " h
".
Ответ 2
Если вам нужно это только для одного теста, который вы хотите легко потерпеть неудачу, когда он истекает, есть простой способ использовать каналы тайм-аута.
Если я подозреваю, что у теста истекло время ожидания, и я все еще хочу, чтобы он провалился, это работа с каналом тайм-аута.
Итак, представьте, что у вас есть код, в котором вы подозреваете, что некоторые goroutines будут заблокированы, и вы хотите убедиться, что ваш тест не пройден.
Для этого я запускаю реальный тест в goroutine, а основной goroutine затем бездельничает, ожидая, когда done
канал завершится или timeout
время 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")
//t.Fatal("Test didn't finish in time")
case <-done:
}
}