Карточка 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 ошибок.
Ещё по теме «Тесты, бенчмарки и модули»
- Minimal version selection как в Go modules
- Упрощённый go mod tidy: лишние и недостающие модули
- Сортировка версий по Semantic Versioning на Go
- Что выведет Go: табличный прогон без testing
- testing.B.Loop в Go 1.24
- Что показывает -benchmem
- t.Errorf и t.Fatalf
- Команда запуска тестов с детектором гонок