В моем проекте я использую следующий подход для запроса данных из базы данных:
- Используйте общий репозиторий, который может возвращать любой тип и не привязан к одному типу, т.е.
IRepository.Get<T>
вместоIRepository<T>.Get
. NHibernatesISession
является примером такого репозитория. -
Используйте методы расширения на
IQueryable<T>
с определеннымT
для инкапсуляции повторяющихся запросов, напримерpublic static IQueryable<Invoice> ByInvoiceType(this IQueryable<Invoice> q, InvoiceType invoiceType) { return q.Where(x => x.InvoiceType == invoiceType); }
Использование будет таким:
var result = session.Query<Invoice>().ByInvoiceType(InvoiceType.NormalInvoice);
Теперь предположим, что у меня есть открытый метод, который я хочу проверить, который использует этот запрос. Я хочу проверить три возможных случая:
- Запрос возвращает 0 фактур
- Запрос возвращает 1 счет-фактуру
- Запрос возвращает несколько счетов-фактур
Теперь моя проблема: что насмехаться?
- Я не могу издеваться над
ByInvoiceType
, потому что это метод расширения, или я могу? - Я не могу даже высмеять
Query
по той же причине.