Жёстко заданные тестовые данные (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-переменной
);