TDD и ADO.NET Entity Framework

ado.net entity-framework integration-testing tdd unit-testing

Вопрос

Недавно я играл с ADO.NET Entity Framework и обнаружил, что он соответствует моим потребностям в проекте, который я разрабатываю. Я также нахожу крутой его неинвазивный характер.

После генерации модели данных из существующей базы данных вы сталкиваетесь с задачей интеграции сгенерированной модели и вашей бизнес-логики. Более конкретно, я привык тестировать интеграцию моих классов, которые взаимодействуют с хранилищем данных через макеты / заглушки интерфейсов DAL. Проблема заключается в том, что вы не можете сделать это с помощью ADO.NET Entity Framework, поскольку генерируемые им сущности являются простыми классами без интерфейса.

Вопрос заключается в следующем: как применить подход TDD к разработке приложения, использующего ADO.NET Entity Framework? Это вообще возможно, или я должен перейти на другой набор инструментов поколения DAL?

Принятый ответ

Одна из главных критических замечаний в отношении Entity Framework заключалась в том, что ее по сути сложно протестировать, например, в голосовании недоверия ALT.Net, цитируемом Gef.

Вот сообщение в блоге, в котором обсуждается, как обойти это и иметь возможность протестировать свой код, не обращаясь к базе данных, при использовании Entity Framework.

Если тестируемость является серьезной проблемой, вы можете захотеть взглянуть на другую инфраструктуру ORM, такую как NHibernate, по крайней мере до выпуска Entity Framework 2.0.


Популярные ответы

Хотя на первоначальный вопрос был дан ответ, я чувствую, что могу что-то добавить:

В настоящее время я использую Entity Framework 4.0 на интранет-сайте, который я создаю. Я могу протестировать все в своей бизнес-логике и контроллерах без подключения к базе данных, используя добавленную поддержку POCO.

Хотя POCO можно генерировать из нового шаблона t4, включенного в VS 2010, я не смог найти в VS 2010 шаблон t4 для генерации контекста вашего объекта (контекст объекта в основном работает как встроенный модуль работы для EF и имеет важное значение для отображения ваших объектов EF в POCO). К счастью, Йоахим Ликке Андерсен в своем блоге Entity Framework 4.0 Beta 1 - POCO, ObjectSet, Repository и UnitOfWork написал шаблон t4 для его генерации, и это было очень полезно. Если вы ищете решение с использованием EF4, которое можно тестировать без подключения к базе данных, я настоятельно рекомендую реализовать нечто похожее на его решение, которое включает в себя универсальный репозиторий, упаковщик единиц работы и фабрику единиц работы. Это было очень полезно.

Удачи.



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему