Создание Mock базы данных в ASP.NET MVC с использованием данных из существующей базы данных - PullRequest
5 голосов
/ 22 июня 2010

У меня есть приложение ASP.NET MVC с некоторыми примерами данных в базе данных SQL Server, которое работает нормально.

Если у меня есть все необходимые репозитории и IOC, есть лиинструмент, который извлекает данные из группы таблиц и «замораживает» их в фиктивном объекте (возможно, используя файл XML для хранения данных), чтобы я мог отсоединить базу данных и использовать фиктивные данные для своего устройстватесты?

Ответы [ 3 ]

3 голосов
/ 22 июня 2010

В зависимости от того, что именно вы пытаетесь проверить, могут быть разные подходы.

Если вы хотите проверить логику доступа к данным, то это уже не модульный тест, а интеграционный тест.Для такого рода тестов было бы неплохо иметь возможность легко заменить реальную базу данных более легкой, может быть, даже базой данных в памяти, такой как SQLite, которая будет реконструирована перед выполнением каждого теста.Если вы используете ORM, эта задача проста.Все, что вам нужно сделать, это сгенерировать сценарии SQL (INSERT INTO ...) из существующей базы данных, изменить и адаптировать диалект к SQLite (при необходимости), прочитать и внедрить в файл SQLite, и, наконец, все, что осталось, это проинструктировать вашслой доступа к данным для использования диалекта SQLite и строки соединения для модульного теста.

Теперь, если вы не используете ORM и ваша логика доступа к данным связана с MSSQL, все становится еще хуже, вам потребуется живая база данных, чтобывыполнить эти интеграционные тесты.В этом случае я бы посоветовал вам дублировать вашу реальную базу данных, которую вы использовали бы для тестов, изменив только строку подключения.Еще раз вам потребуется правильно setup и teardown (предпочтительно в транзакции) этой тестовой базы данных, чтобы перевести ее в известное состояние для тестов.

Если вы хотите протестировать код, который зависитв этих репозиториях (таких как, например, ваши контроллеры) вам даже не нужно беспокоиться о том, чтобы манипулировать данными, так как ваши контроллеры зависят от абстрактных репозиториев, а не от реальных реализаций (не так ли), так что вы можете легко насмехаться над методамихранилище для проверки логики в контроллерах.

2 голосов
/ 22 июня 2010
0 голосов
/ 22 июня 2010

Я не знаю прямого способа сделать то, что вы просите, но MSSQL поддерживает экспорт в CSV, Access и Excel.Хотя это требует от вас изменения уровня доступа к данным в вашем среднем звене, и, кроме того, я не чувствую, что это отвечает на ваш вопрос:

«заморозить» его в макетобъект

В этом я не уверен.Возможно ли просто восстановить резервную копию базы данных либо на том же сервере SQL, что и новая база данных, либо, возможно, на сервере SQL разработчика?

...