Можно ли заглушить контекст и классы Entity Framework для проверки уровня доступа к данным?

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

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

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

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

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

1 ответ

Решение

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

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

Другие вопросы по тегам