2009-04-02 7 views
19

Я использую структуру сущности для доступа к моей базе данных, и я хочу издеваться над контекстом базы данных в своих модульных тестах, чтобы я мог тестировать свои классы среднего уровня без их зависимости от реальных данных. Я знаю, что я не первый, кто спрашивает об этом (Mocking an Entity Framework Model), но после некоторых поисковых запросов у меня есть инстинкт, что возможно создать экземпляр контекста только на основе метаданных модели.Контекст Mocking Entity Framework

Кто-нибудь мог это сделать?

+0

Даже при создании другого слоя, как бы вы выполняли операцию сохранения - поскольку EF использует mMamDbEntities.SaveChanges(); после того, как ссылка Entity была обработана –

+0

См. мой ответ на вопрос [База данных Mock Entity Framework] (http://stackoverflow.com/questions/6087857/mock-entity-framework-database/14406546#14406546). Контекст макетного объекта может быть создан из вашей модели сущности с использованием шаблона T4. Таким образом, создаются обычные классы POCO, и его можно довольно легко расширить, чтобы создать контекст и интерфейс макетного объекта, чтобы сделать его доступным с вашим конкретным контекстом объекта. – NightOwl888

ответ

6

Вы можете сделать это только с помощью метаданных, там есть хорошая статья, и модульное тестирование EF в целом, here.

7

Хорошо известный способ сделать это - использовать Repository pattern. Это действует как слой над вашей конкретной реализацией доступа к данным и предоставляет место для ввода тестовых удвоений.

+1

Даже с шаблоном репозитория (который определенно является хорошей идеей) вы все равно можете сохранить объект ObjectContext, чтобы воспользоваться им. –

+1

Образцы хранилища, которые я видел для EF, используют ObjectContext внутри. –

+3

ObjectContext обычно следует вводить в репозитории в качестве зависимости. Репозиторий и блок работы ортогональны. –

Смежные вопросы