Добрый день, подскажите пожалуйста какие существуют подходы если нужно протестировать части веб-приложения которые работают с базой данных изменяя ее содержимое, но которые не меняют структуру таблиц
Скрипт. Функция (метод) выполняют какие-либо реальные действия с данными в БД. Тестовый скрипт затем выполняет выборку проверяемых данных из БД, сверяет их с ожидаемыми и выводить результат проверки. После теста, изменённые данные возвращают в исходное состояние или удаляют.
Вместо драйвера (или любого механизма, который выполнят непосредственного взаимодействие с БД), используется его имитационный (mock) вариант, с преднастроенными результатами для конкретных SQL запросов. Например:
объектБД = инициироватьЛожноеПодключениеБД;
объектБД->добавитьЛожныйЗапрос(
'SELECT name FROM users WHERE id = ?', # для данного запроса
[ ['Иван'] ] # выдать такой результат
);
функция получитьИмяПользователя (номерПользователя) {
...
# объектБД - это "ложный" объект для работы с БД, который лишь
# делает вид, что взаимодействует с БД
выборка = объектБД->выполнить(
'SELECT name FROM users WHERE id = ?', номерПользователя
);
...
возвратить выборка[0][0];
}
В тесте:
равно(получитьИмяПользователя(), "Иван", "имя пользователя Иван");
зависит от фреймворка. Часто ORM позволяет накрутить объекты «в памяти», без обращения к БД. Часто можно использовать подменную SQLite-базу, которая тоже будет в памяти и работать быстро.
А вообще, коль скоро вопрос о юнит-тестах — юниты, отвечающие за работу с моделями, должны быть отделены от собственно базы данных (например, тем же ORM).
Если не отделены — то это не юнит, а интеграционное тестирование %)
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости