Я работаю с большим количеством веб-приложений, которые управляются базами данных различной сложности на бэкэнде. Как правило, существует слой ORM, отдельный от бизнес-логики и представления. Это делает модульное тестирование бизнес-логики довольно простым; вещи могут быть реализованы в дискретных модулях, и любые данные, необходимые для теста, могут быть подделаны через объект издевательства.Какова лучшая стратегия для модульных тестов, управляемых базами данных?
Но тестирование ORM и самой базы данных всегда было чревато проблемами и компромиссами.
На протяжении многих лет я пробовал несколько стратегий, ни одна из которых не полностью удовлетворила меня.
Загрузить тестовую базу данных с известными данными. Выполните тесты против ORM и убедитесь, что вернулись правильные данные. Недостатком здесь является то, что ваша тестовая БД должна не отставать от любых изменений схемы в базе данных приложений и может выйти из синхронизации. Он также полагается на искусственные данные и не может выявлять ошибки, возникающие из-за глупого ввода пользователем. Наконец, если тестовая база данных невелика, она не выявит неэффективности, как недостающий индекс. (ОК, это последнее, на самом деле это не то, для чего нужно использовать модульное тестирование, но это не повредит.)
Загрузите копию базы данных производства и протестируйте ее. Проблема здесь в том, что вы, возможно, не знаете, что находится в производственной БД в любой момент времени; ваши тесты, возможно, потребуется переписать, если данные со временем меняются.
Некоторые люди указали, что обе эти стратегии основаны на конкретных данных, а единичный тест должен проверять только функциональность. С этой целью я видел:
- Используйте сервер базы данных mock и проверяйте только, что ORM отправляет правильные запросы в ответ на вызов метода.
Какие стратегии вы использовали для тестирования приложений, управляемых базами данных, если они есть? Что сработало лучше для вас?
Загрузка копии рабочей базы данных также имеет последствия для безопасности и конфиденциальности. Как только он становится большим, его копия и размещение его в вашей среде разработки могут иметь большое значение. – 2009-03-29 23:43:26
Честно говоря, это огромная боль. Я новичок в тестировании, и я также написал орму, который хочу протестировать. Я уже использовал ваш первый метод, но прочитал, что он не делает тестовый блок.Я использую специфические функциональные возможности db, и поэтому насмехаться над DAO будет сложно. Я думаю, что плохо использовал мой текущий метод, так как он работает, а другие его используют. Автоматические тесты rock btw. Благодарю. – frostymarvelous 2011-08-06 14:04:21