Я працюю з безліччю веб-додатків, які керуються базами даних різної складності на бекенді. Як правило, існує рівень ORM, окремий від логіки бізнесу та презентації. Це робить опробовування бізнес-логіки досить простим; речі можуть бути реалізовані в дискретних модулях, і будь-які дані, необхідні для тесту, можуть бути підроблені через глузування об'єктів.
Але тестування ORM та самої бази даних завжди загрожує проблемами та компромісами.
За ці роки я спробував кілька стратегій, жодна з яких мене повністю не влаштовувала.
Завантажте тестову базу даних із відомими даними. Запустіть тести на ORM і підтвердьте, що потрібні дані повертаються. Недоліком тут є те, що ваш тестовий БД повинен бути в курсі будь-яких змін схеми в базі даних додатків і може вийти з синхронізації. Він також покладається на штучні дані і не може виявляти помилки, які виникають через дурне введення користувачем. Нарешті, якщо тестова база даних невелика, вона не виявить неефективності, як відсутній індекс. (Гаразд, останній насправді не є те, для чого слід використовувати одиничне тестування, але це не шкодить.)
Завантажте копію виробничої бази та протестуйте її. Проблема тут полягає в тому, що ви можете поняття не мати, що знаходиться у виробничому БД у будь-який момент часу; ваші тести, можливо, потрібно буде переписати, якщо дані змінюються з часом.
Деякі люди вказували, що обидві ці стратегії покладаються на конкретні дані, і тест одиниці повинен перевірити лише функціональність. З цією метою я бачив:
- Використовуйте сервер бази даних макетів і переконайтеся, що ORM надсилає правильні запити у відповідь на заданий виклик методу.
Які стратегії ви використовували для тестування додатків, керованих базами даних, якщо такі є? Що найкраще працювало для вас?