Мое приложение — страницы со списком: например, Продукты / Категории из магазина, Список врачей в Лос-Анджелесе в Справочнике или результаты поиска и т. Д.
Я реструктурирую / реорганизую / модернизирую устаревшее приложение, и при запуске единственным типом тестов, которые я могу написать, являются интеграционные тесты, например. используя Selenium / эквивалент, чтобы действительно попасть на страницу на сервере. Код, который срочно нуждается в рефакторинге, включает в себя чрезвычайно сложные и раздутые функции, которые выполняют фильтрацию списков. Мне нужны интеграционные тесты, чтобы гарантировать, что код не будет нарушен рефакторингом. По мере выполнения рефакторинга я буду постепенно интегрировать модульные тесты.
Я понимаю, как создать интеграционный тест, чтобы проверить, существует ли страница продукта и содержит ли она соответствующие данные. Я мог бы иметь несколько предопределенных продуктов в качестве исходных данных базы данных, которые будут сбрасываться перед каждым тестом и явно ссылаться на эти продукты в тесте.
Но как настроить тесты для какой-либо сложной страницы со списком, которая фильтрует продукты по цене / пользовательским атрибутам, врачей по специальности, городу и т. Д. + Результаты разбиваются на страницы? Если бы я, где это проверить вручную, мне нужно значительное количество тестовых данных и выборочная проверка, работают ли фильтры, как ожидается, и работает ли нумерация страниц. Очевидно, я пытаюсь автоматизировать этот процесс, но я борюсь с тем, как связать тесты с тестовыми данными.
Некоторые из подходов, о которых я думаю:
Настройте тестовые данные, запишите, как в настоящее время отображаются результаты (перед рефакторингом кода), а затем жестко запишите код в тесте.
Недостатки: Жесткие тестовые ожидания теста, которые зависят от большее количество тестовых данных кажется таким хрупким! Достаточно добавить одну запись в БД, чтобы исказить ожидаемые результаты от фильтра!
Извлеките SQL, используемый в настоящее время кодом, запустите этот SQL в тесте и сравните результаты со страницами.
Преимущества: Тест не прервется, если запись будет добавлена в базу данных до тех пор, пока SQL-запрос не изменится.
Недостатки: чувствует себя сложным.
Переосмыслите, нужно ли тестировать страницы фильтра и какие части?
…
Задача ещё не решена.
Других решений пока нет …