Нет изоляции данных (No Data Isolation)
Тест создаёт данные в системе и не убирает их после завершения. Накопленный «мусор» нарушает последующие тесты, особенно те, которые проверяют списки, подсчёты или уникальность.
Симптомы
- Нет
@AfterEachс удалением созданных данных - Тест создаёт запись в БД / через API, но не удаляет при teardown
- Тест
search("Тестовый товар")возвращает 5 результатов вместо 1 — предыдущие прогоны не почистились - При повторном запуске тест падает из-за нарушения уникального constraint
- В тестовой БД накапливаются тысячи
Тестовый пользователь_1,Тестовый пользователь_2, ...
Причины возникновения
- Создать данные легко, убрать — нужно писать дополнительный код
- «Тестовая база — одноразовая, потом снесём»; база живёт годами
- Незнание
@AfterEach,@AfterAll, транзакционных откатов - Нет общего соглашения по жизненному циклу тестовых данных
Почему это проблема
- Загрязнение среды: следующий прогон — или следующий тест — получает неожиданное состояние
- Нестабильность: тест зелёный с первого запуска и красный со второго — флаки
- Нельзя запускать параллельно: несколько потоков создают данные, мешают друг другу
- Бесполезная диагностика: падение вызвано мусором от другого теста, а не реальным дефектом
Решение
Явная очистка в @AfterEach или транзакционный откат для интеграционных тестов:
// ❌ данные остаются
adminPage.createProduct("Тестовый товар", 999);
assertThat(catalogPage.search("Тестовый товар")).hasSize(1);
// ✅ cleanup в @AfterEach
@AfterEach
void cleanup() {
if (createdProductId != null) {
productApi.delete(createdProductId);
}
}