Жадный тест (Eager Test)
Один тест-метод проверяет несколько независимых функций или сценариев за один раз. При падении непонятно, какая именно функциональность сломана.
Симптомы
- Тест называется
testCrud(),testUserFlow(),testAllFeatures()— слишком широкое название - В одном методе последовательно: create → update → delete, или: открыть → заполнить → отправить → проверить email → проверить БД
- Несколько логически независимых
// sectionили// stepвнутри одного теста - При падении трассировка показывает середину большого метода — неясно, что именно не работает
Причины возникновения
- Экономия на фикстуре: «раз уж создали объект, проверим всё сразу»
- Перенос стиля ручного тест-кейса (шаги 1–10 в одном кейсе) в автоматизированный тест
- Непонимание принципа «один тест — одно поведение»
- Стремление уменьшить количество тест-методов, чтобы «не раздувать класс»
Почему это проблема
- Потеря информации о дефекте: упал шаг 3 из 6 — шаги 4–6 не выполнились, их состояние неизвестно
- Трудно читать: непонятно, что именно тестирует этот метод
- Нельзя запустить выборочно: хочешь перепроверить только delete — приходится гонять весь тест
- Большая фикстура: тест тянет за собой состояние всех проверяемых сценариев
Решение
Один тест — одно поведение:
// ❌ create + update + delete в одном методе
@Test
void userCrud() { ... }
// ✅ три независимых теста
@Test void createUserAssignsId() { ... }
@Test void updateUserChangesEmail() { ... }
@Test void deleteUserRemovesItFromSystem() { ... }