Жёстко заданные тестовые данные (Hardcoded Data)
Конкретные значения — логины, пароли, цены, идентификаторы — вшиты прямо в тест-код строковыми и числовыми литералами.
Симптомы
-
loginPage.login("admin", "Admin123!")прямо в тест-методе assertEquals("1 299 ₽", orderPage.getTotal())-
By.id("user-42")— хардкодный ID записи из БД - URL вида
"https://staging.example.com/api/v1"в коде теста - Одни и те же строки повторяются в разных тест-классах
Причины возникновения
- Быстрое написание теста «работает сейчас — разберёмся потом»
- Нет договорённости об управлении тестовыми конфигурациями
- Незнание подходов: property-файлы, переменные окружения, фабрики данных
- Страх добавить зависимость или усложнить код ради «простых тестовых значений»
Почему это проблема
- Привязка к окружению: тест упадёт при смене пароля, обновлении цены или другой БД
- Секреты в репозитории: пароли в коде попадают в git-историю и публичные репо
- Дублирование: одно значение изменилось — нужно найти и поправить в 15 местах
- Нельзя запустить на prod/staging: захардкоженный стейджинговый URL не подходит для другого стенда
-
Нестабильность:
"1 299 ₽"сломается при изменении НДС, скидки или форматирования
Решение
Данные из конфигурации, секреты из переменных окружения, объекты через фабрики:
// ❌
loginPage.login("admin", "Admin123!");
// ✅
loginPage.login(
config.getString("test.user.login"),
config.getString("test.user.password") // из env-переменной
);