testing/synctest: тестируем время и горутины без Sleep на секунды… — Библиотека Go-разработчика | Golang — TG.ME

⏱️ testing/synctest: тестируем время и горутины без Sleep на секунды

Тесты конкурентного кода часто либо долго выполняются из-за реального времени, либо флакают из-за гонок.
В Go 1.25 появился стабильный testing/synctest, который позволяет запускать тест в изолированном bubble с виртуальным временем.


func TestTimeout(t *testing.T) {
synctest.Test(t, func(t *testing.T) {
ctx, cancel := context.WithTimeout(
context.Background(),
time.Hour,
)
defer cancel()

<-ctx.Done()

if ctx.Err() != context.DeadlineExceeded {
t.Fatal("timeout did not expire")
}
})
}


Час здесь не проходит в реальном времени: когда все горутины заблокированы, виртуальные часы автоматически перемещаются к следующему событию.

А synctest.Wait() позволяет дождаться, пока конкурентная работа в bubble завершится или перейдёт в состояние ожидания.

📌 synctest был экспериментом в Go 1.24, а с Go 1.25 входит в стандартную библиотеку.

🔗 Источник

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека Go-разработчика

#GoToProduction
🤔5❤1
August 19, 2026 3.9K 34