У нас безумно управляемое данными приложение. Мы хотим провести модульное тестирование приложения, но разработчики устойчивы к созданию полностью поддельных репозиториев из-за объема данных. Я их не виню.
Поймите, что мы модифицируем тесты в существующее приложение. Если бы мы начинали заново, мы бы внесли массу архитектурных изменений, чтобы облегчить более качественное модульное тестирование с использованием поддельных репозиториев.
Мы хотели бы распространить известный mdf-файл с тестами, скопировать его и использовать для выполнения наших тестов. Есть ли одобренная методика для этого? Я знаком с встраиванием ресурсов в тестовую dll, но не со встраиванием mdf - если это вообще возможно.
Решение (вроде):
Я закончил тем, что взял DataContextWrapper из поста Эндрю Токли о насмешливых контекстах данных Linq (http://andrewtokeley.net/archive/2008/07/06/mocking-linq-to-sql-datacontext.aspx)
и создал FakeDataContext.cs, который в основном представляет собой набор списков.
Я написал по-настоящему варварский шаблон T4 (подумайте "select * FROM <# = table.BaseClass.QualifiedName #>"), чтобы скопировать данные из известной хорошей базы данных и создать огромный класс, полный таких вещей, как:
List<Customer> _customers = new List<Customer>();
_customers.Add(new Customer(){CustomerId = 1, CustomerName = "ACME"});
и т.д.
Класс имеет 25K строк, но, так как t4 записывает все эти строки, кого это волнует? Это позволяет нам имитировать только контекст данных, поэтому мы можем тестировать наш linq против поддельного контекста с некоторой разумной уверенностью, что мы правильно выполнили запросы. Оригинальные разработчики вложили в репозиторий тонну бизнес-логики, что позволяет нам проверять логику на основе достоверных данных.