Я использую шаблон репозитория с фильтрами в своем приложении MVC. В проекте отображается список транзакций, в котором я могу указать период даты для получения подмножества транзакций или указать конкретную дату для получения транзакций на эту дату (включая просмотры года, года / месяца и года / месяца / дня).
У меня также есть функция для подкачки следующих и предыдущих транзакций в зависимости от того, какой вид мы смотрим. Например, если мы выбираем все транзакции для данного года / месяца, я нахожу следующие предыдущие и следующие транзакции на основе этого периода даты.
Как бы вы пошли о модульном тестировании для такой вещи ... вот мой репозиторий для тестовых транзакций.
public class TestTransactionsRepository : ITransactionsRepository
{
private IList<Transaction> db;
public TestTransactionsRepository()
{
db = new List<Transaction>();
int i = 0;
for (; i < 10; i++)
{
db.Add(CreateTransaction(i, 3));
}
for (; i < 25; i++)
{
db.Add(CreateTransaction(i, i));
}
for (; i < 80; i++)
{
db.Add(CreateTransaction(i, 5));
}
}
private Transaction CreateTransaction(int id, int accountID)
{
return new Transaction
{
ID = id,
AccountID = accountID,
Date = ??
};
}
}
Вот пример тестового сценария.
[TestMethod]
public void TransactionsRepository_Get_With_Filter_Between_ThisDate_
And_ThatDate_Returns_xx_Transactions()
{
IList<Transaction> transactions = TransactionsRepository.Get()
.Between(thisDate, thatDate)
.ToList();
Assert.AreEqual(xx, transactions.Count);
}
И тогда это мой метод фильтрации
public static IQueryable<Transaction> Between(
this IQueryable<Transaction> qry, DateTime startDate, DateTime endDate)
{
return from t in qry
where t.Date >= startDate && t.Date <= endDate
select t;
}