Как вы лучше всего справляетесь с тестами с датами?
Я использую шаблон репозитория с фильтрами в моем приложении MVC. В проекте отображается список транзакций, в котором я могу указать период даты, чтобы получить подмножество транзакций, или указать конкретную дату, чтобы получить транзакции на эту дату (включая просмотры года, года / месяца и года / месяца / дня).
У меня также есть функциональные возможности для подкачки следующих и предыдущих транзакций в зависимости от того, какой вид мы смотрим. Например, если мы выбираем все транзакции для данного года / месяца, я нахожу следующие предыдущие и следующие транзакции на основе этого периода даты.
Как бы вы пошли о модульном тестировании для такой вещи... вот мой репозиторий тестовых транзакций.
открытый класс TestTransactionsRepository: ITransactionsRepository {private IListdb; public TestTransactionsRepository () {db = новый список (); 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)); } } частная транзакция CreateTransaction(int id, int accountID) {вернуть новую транзакцию { ID = id, AccountID = accountID, Date =?? }; } }
Вот пример тестового сценария.
[Метод испытания] public void TransactionsRepository_Get_With_Filter_Between_ThisDate_ And_ThatDate_Returns_xx_Transactions() { IListTransactions = TransactionsRepository.Get() .Between(thisDate, thatDate) .К списку(); Assert.AreEqual(xx, Transactions.Count); }
И тогда это мой метод фильтра
public static IQueryableBetween (это IQueryable qry, DateTime startDate, DateTime endDate) { возврат из т в qry где t.Date >= startDate && t.Date <= endDate выберите т; }
2 ответа
Вам нужен вариант формы .Add
(или из CreateTransaction
), который позволяет вам "ввести" (поддельную) дату именно для таких целей тестирования.
Вы можете использовать те же приемы, которые описаны в разделе " Как выполнить модульное тестирование для конкретного машинного поведения?", Для внедрения / использования / создания / тестирования с определенными датами.