Можно ли заглушить контекст и классы Entity Framework для проверки уровня доступа к данным? - PullRequest
2 голосов
/ 07 июня 2011

Я знаком с методами, используемыми для тестирования контроллеров и бизнес-логики в приложении ASP .NET MVC.

Доступ к данным в нашем приложении сосредоточен в специальных службах, которые слабо связаны, используют интерфейсы и работают с реальной базой данных через Entity Framework.

Однако, поскольку DAL становился все более сложным, скрывая детали реализации базы данных и предоставляя код приложения с абстракциями, мы стали беспокоиться о том, сможем ли мы протестировать его любым способом. Поскольку он уже тесно связан с контекстом EF, мы не планируем вводить еще один слой в стиле репозитория, однако это также означает, что мы не можем просто протестировать его с поддельными данными.

Мне интересно , возможно ли каким-либо образом смоделировать или заглушить контекст объекта Entity Framework, в то же время имея возможность выполнять простые операции, такие как добавление / удаление объектов и выполнение запросов .

Я также ищу мнение о том, является ли это вообще хорошей идеей (возможно, действительно плохой), а если нет, то каким-нибудь "умным" советом по тестированию уровня данных.

1 Ответ

11 голосов
/ 07 июня 2011

Пересчет EF частично возможен, если вы используете IObjectSet и пользовательский интерфейс для своего производного экземпляра ObjectContext, и весь ваш зависимый от EF код будет получать доступ к функциям EF только через эти интерфейсы (контекст будет введен).Все остальные функции, связанные с EF, должны быть скрыты в методах, предоставляемых в интерфейсе контекста объекта.

Я обсуждал в нескольких ответах (например, здесь и здесь ), что это действительно не так.не поможет, потому что вы не тестируете настоящий код.Очень большая проблема заключается в том, что после того, как вы смоделируете / заглушите код EF, вы заменяете linq-to-entity на linq-to-objects.Другая проблема заключается в том, что вы теряете ссылочную целостность для постоянных объектов.Поэтому я считаю, что DAL, персистентность и запросы должны быть покрыты интеграционными тестами с использованием реального EF и реального DB.

...