Метод testing.T.Deadline
Метод testing.T.Deadline возвращает время (time.Time),
когда текущий тест должен быть завершен. Если тест выполняется дольше
указанного времени, Go завершит его принудительно. Метод возвращает
два значения: время завершения и булево значение, указывающее,
установлен ли дедлайн для теста. Если дедлайн не установлен,
второе значение будет false.
Синтаксис
t.Deadline()
Пример
Давайте проверим, установлен ли дедлайн для теста:
package main
import (
"fmt"
"testing"
"time"
)
func TestDeadline(t *testing.T) {
deadline, ok := t.Deadline()
if ok {
fmt.Printf("deadline: %v\n", deadline)
} else {
fmt.Println("deadline not set")
}
}
Результат выполнения кода (если тест запущен с флагом -timeout):
"deadline: 2026-09-04 15:30:00 +0000 UTC"
Пример
Давайте вычислим оставшееся время до завершения теста:
package main
import (
"fmt"
"testing"
"time"
)
func TestRemainingTime(t *testing.T) {
deadline, ok := t.Deadline()
if ok {
remaining := time.Until(deadline)
fmt.Printf("remaining time: %v\n", remaining)
} else {
fmt.Println("deadline not set")
}
}
Результат выполнения кода:
"remaining time: 5m0s"
Пример
Давайте используем дедлайн для прерывания долгой операции:
package main
import (
"fmt"
"testing"
"time"
)
func TestLongOperation(t *testing.T) {
deadline, ok := t.Deadline()
if !ok {
t.Skip("deadline not set, skipping test")
}
remaining := time.Until(deadline)
if remaining < time.Second {
t.Skip("not enough time to complete the test")
}
time.Sleep(500 * time.Millisecond)
fmt.Println("operation completed successfully")
}
Результат выполнения кода:
"operation completed successfully"
Смотрите также
-
метод
testing.T.FailNow,
который немедленно завершает выполнение теста -
метод
testing.T.Skip,
который пропускает текущий тест -
метод
testing.T.Parallel,
который позволяет запускать тесты параллельно -
метод
testing.T.Cleanup,
который регистрирует функцию для выполнения после завершения теста