TGViewer
Библиотека Go-разработчика | Golang Библиотека Go-разработчика | Golang @goproglib · 24.1K subscribers
Post #7459 4.31K
⏱️ 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
  • ❤ 1
  • 😍 1
  • 👾 1
More from @goproglib
  1. Sep 21, 2026🤩 Go с нуля: серия базовых шпаргалок Собрали путь от Hello, World! до goroutines, channel…
  2. Sep 20, 2026🤔 Вопрос с собеседования по Go Что выведет программа? ❤️ — [1 2 3 4 5] / [1 2 10] 🔥 — [1…
  3. Sep 19, 2026🛠 Rune — open-source IDE и terminal multiplexer на Go Rune объединяет IDE, терминал и AI-…
  4. Sep 18, 2026🤩 SQLite вместо отдельного брокера в Go Watermill поддерживает SQLite Pub/Sub — сообщения…
  5. Sep 17, 2026⚡️ Go 1.27 ускоряет небольшие аллокации В Go 1.27 появился size-specialized memory allocat…
  6. Sep 16, 2026🛠 Напишите конфиг сами viper — самая частая рекомендация для конфигурации в Go. Он умеет…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →