Выбор ответа Junior Тесты, бенчмарки и модули спрашивают часто обновлено
Табличные тесты в Go
Вопрос
Зачем в табличных тестах оборачивать каждый случай в t.Run(tt.name, ...)?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Каждый случай становится подтестом: имя, -run, свой Fatal. Подтесты дают изоляцию и адресность: go test -run "TestParse/пустаястрока", понятное имя в выводе, свой Cleanup и параллельность.
Варианты ответа
- Без t.Run случаи из таблицы вообще не запустятся
- Каждый случай становится подтестом: имя,
-run, свой Fatalправильный ответ - t.Run ускоряет тесты в несколько раз за счёт параллельности
- t.Run автоматически генерирует тестовые данные для таблицы
Разбор
Подтесты дают изоляцию и адресность: go test -run "TestParse/пустая_строка", понятное имя в выводе, свой Cleanup и параллельность. Без t.Run цикл тоже работает, но первый Fatal прервёт весь тест, и в отчёте не видно, какой случай упал. Ускорения или генерации данных t.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
- Команда запуска тестов с детектором гонок