Карточка Senior Тесты, бенчмарки и модули обновлено

testing/synctest

Вопрос

Зачем пакет testing/synctest (стабилен с Go 1.25)?

Попробуйте сами

Ответьте про себя или вслух, потом откройте ответ и сверьтесь.

Показать ответ и разбор

Коротко

Для тестов конкурентного кода со временем: synctest.Test(t, func(t testing.T){...}) запускает код в «пузыре» с фиктивными часами. Время продвигается мгновенно, когда все горутины пузыря заблокированы, а synctest.Wait() ждёт, пока они все уснут.

Ответ

Для тестов конкурентного кода со временем: synctest.Test(t, func(t *testing.T){...}) запускает код в «пузыре» с фиктивными часами. Время продвигается мгновенно, когда все горутины пузыря заблокированы, а synctest.Wait() ждёт, пока они все уснут. Тесты с таймаутами становятся быстрыми и детерминированными.

Разбор

В Go 1.24 пакет был экспериментальным (GOEXPERIMENT=synctest) с функцией Run.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.