TDD и ADO.NET Entity Framework
В последнее время я играю с ADO.NET Entity Framework, и я считаю, что это соответствует моим потребностям в проекте, который я разрабатываю. Я также считаю прохладным его неинвазивный характер.
После создания модели данных из существующей базы данных вы столкнулись с задачей интеграции сгенерированной модели и вашей бизнес-логики. Более конкретно, я привык к интеграции - тестируйте свои классы, которые взаимодействуют с хранилищем данных через mocks/stubs интерфейсов DAL. Проблема в том, что вы не можете сделать это, используя ADO.NET Entity Framework, потому что созданные им объекты - это простые классы без интерфейса.
Возникает вопрос: как применить подход TDD к разработке приложения, использующего ADO.NET Entity Framework? Возможно ли это, или я должен перейти на другой набор инструментов DAL-генерации?
Ответы
Ответ 1
Одна из серьезных критических замечаний против Entity Framework заключалась в том, что ее трудно проверить, например, в ALT.Net Голосование об отсутствии уверенности, указанный в gef.
Вот сообщение в блоге, в котором обсуждается, как обойти это, и быть в состоянии проверить свой код без попадания в базу данных при использовании Entity Framework.
Если тестируемость является большой проблемой, вам может потребоваться рассмотреть другую структуру ORM, такую как NHibernate, по крайней мере, до тех пор, пока не выпустят Entity Framework 2.0.
Ответ 2
Хотя на исходный вопрос был дан ответ, я чувствую, что могу что-то добавить:
В настоящее время я использую Entity Framework 4.0 на интранет-сайте, который я создаю. Я могу проверить все в своей бизнес-логике и контроллерах без подключения к базе данных с помощью поддержки POCO, которая была добавлена.
Хотя POCO может быть сгенерирован из нового шаблона t4, включенного в VS 2010, то, что я не смог найти в VS 2010, является t4-шаблоном для создания вашего контекста объекта (контекст объекта в основном работает как встроенный блок работы для EF и необходим для сопоставления ваших объектов EF с POCOs). К счастью, Joachim Lykke Andersen в своем блоге Entity Framework 4.0 Beta 1 - POCO, ObjectSet, Repository и UnitOfWork написал t4 для его создания, и это было очень полезно. Если вы используете решение с использованием EF4, которое можно тестировать без подключения к базе данных, я настоятельно рекомендую реализовать что-то похожее на его решение, которое включает в себя общий репозиторий, единицу рабочей обертки и единицу работы factory. Это было очень полезно.
Удачи.
Ответ 3
Я согласен с тем, что версия 1 Entity Framework является преступлением против дизайна, и это определенно получило мой голос без доверия. Я отношусь к группе продуктов EF, хотя для подтверждения отказа и ответа, открывая процесс проектирования для сообщества. Следующий выпуск не будет идеальным, он может быть даже не готов для использования в приложении уровня производства, но я думаю, что они наконец начинают понимать, что важно для тех, кто знает, что плохой дизайн - это плохой бизнес. Это было сказано... Я все еще подозрительно. Непрерывная обратная связь с дизайном является новой для этих ребят, и я прочитал довольно много заявлений в блоге ADO.NET, которые поднимают яркие красные флаги. Мы увидим, как это происходит с выпуском .NET 4.0.
Кажется, что они пытаются:
Прохождение разработки с использованием платформы Entity Framework 4.0
Ответ 4
"Тесное сцепление настойчивости инфраструктура для классов сущностей в значительной степени исключает возможность эффективно использовать очень плотную обратную связь циклов бизнес-логики с автоматическое тестирование. В своем текущем состояния, классы объектов EF не могут быть эффективно тестируются отдельно базы данных.
Эффективность автоматизированного блока тестирование поведенческих объектов в значительной степени вопрос о том, насколько легко механика настройки тестовых данных и как быстро тесты могут быть выполнены. Использование фактической базы данных сделает установка тестовых данных более трудоемкая, вводить данные для удовлетворения реляционных ограничения, не относящиеся к теста и выполнить проверку выполнения на порядок медленнее.
У команды есть способность эволюционировать дизайн и инкрементная доставка поврежденные инфраструктурой Entity невнимание к основному программному обеспечению принципы проектирования, такие как разделение Обеспокоенность".
Блаженно украденный отсюда:
http://efvote.wufoo.com/forms/ado-net-entity-framework-vote-of-no-confidence/
Ответ 5
Если вы посмотрите на инструменты генерации DAL, вам будет сложно интегрировать это с TDD. Большинство инструментов генерации dal, которые я знаю, также генерируют ваши бизнес-объекты и плотно связывают их с DAL-тестированием.
Вы можете посмотреть на инструменты OR-mapping, такие как nHibernate и, возможно, Linq на sql, которые позволяют "незнание стойкости", вы можете сами определить свои бизнес-объекты и не иметь ссылок на DAL или любой другой код инфраструктуры. Это значительно упрощает тестирование вашей бизнес-логики из вашей базы данных. Я нашел, что это также позволяет гораздо лучше использовать другой сценарий, например, случайно подключенных клиентов.
Ответ 6
Этот ответ изменился на "Да, вы можете".
Вы можете создавать POCO и интерфейсы с помощью настраиваемых шаблонов T4, таких как https://entityinterfacegenerator.codeplex.com/, а затем создавать насмешливые объекты для проверки входа и выхода EF без удара базы данных.