Жадный тест (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() { ... }