2012-06-06 3 views
1

Я много читал об модульном тестировании платформы Entity Framework.Как провести тестирование Entitiy-Framework (EF) в моей бизнес-логике?

Я отправляю этот вопрос, потому что я просто видел, есть слишком много решения этой проблемы!

Вот решение я нашел:

  1. Используйте дорогой коммерческий инструмент под названием TypeMock (упомянутый here).
  2. Используйте альфа-инструмент с открытым исходным кодом под названием Effort (упомянутый here).
  3. Использование Образцовый шаблон и Rhino Mock. протестировать изолированные запросы LINQ к реальной базе данных (упомянуто here).

Некоторые проблемы с некоторыми из методов заявил здесь:

  • Вы не можете обойти тот факт, что вам нужно, чтобы поставлять ObjectContext со строкой подключения
  • Если вы подделать ObjectContext - некоторые вещи, которые могут работать в модульном тестировании, не будут работать в производстве (например, выполняемые функции внутри запросов)

Некоторые из статей, которые я читал, были 3-4 года назад.

Есть ли у кого-нибудь опыт в этом вопросе и может помочь мне найти лучшее решение?

Для того, чтобы все было ясно: мои бизнес-логические функции - это не просто простые функции, как «GetUserById».

Некоторые из функций включают в себя доступ к объектам, которые имеют отношения к другим объектам. (например, я могу добавить пользователя + отдел + офис в той же функции).

ответ

2

Для этого, я бы рекомендовал использовать шаблон хранилища и использовать фальшивую фреймворк, например Rhino или MOQ, для проверки вашей бизнес-логики, и затем я бы рекомендовал вам провести некоторые интеграционные тесты для вашего репозитория.

Прежде всего, это следует за «Принципом единственной ответственности» и позволяет протестировать вашу бизнес-логику с почти такими большими накладными расходами (Mocking ObjectContext - это боль), и это позволяет вам проверять ваши запросы с помощью реальных данных. Я бы сказал, что любое хорошо протестированное решение будет включать тестирование Unit и Integration.

+0

Я никогда не пользовался Rhino или MOQ. У вас есть образцы, которые могут помочь мне? Я не понимаю, как я должен отделить код LINQ от бизнес-логики. Где я помещаю «entity.SaveChanges»? в бизнес-логике? или в части, проверенной Rhino \ MOQ? что, если моя функция в BL имеет 2 обращения к базе данных - один для получения списка элементов и один для повторения каждого элемента и выполнения некоторых действий? –

+0

и еще один вопрос - этот метод вы предлагаете поддерживать ленивую загрузку? Я не хочу, чтобы каждый вызов базы данных выполнял «.ToList()», потому что он мог бы принести огромные объемы данных из базы данных ... –

+0

вам не нужно удалять linq, я бы посмотрел, используя шаблон Unit Of Work, вот пример: http://elegantcode.com.com/2009/12/15/entity-framework-ef4-generic-repository- и-unit-of-work-prototype /, он немного старше, но концепции все те же, вы помещаете свои репозитории в DAL, а затем вызываете их, хотя Unit Of Work –

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