Я использую шаблон репозитория с фильтрами в моем приложении 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; }