Как вы лучше всего справляетесь с тестами с датами?

Я использую шаблон репозитория с фильтрами в моем приложении MVC. В проекте отображается список транзакций, в котором я могу указать период даты, чтобы получить подмножество транзакций, или указать конкретную дату, чтобы получить транзакции на эту дату (включая просмотры года, года / месяца и года / месяца / дня).

У меня также есть функциональные возможности для подкачки следующих и предыдущих транзакций в зависимости от того, какой вид мы смотрим. Например, если мы выбираем все транзакции для данного года / месяца, я нахожу следующие предыдущие и следующие транзакции на основе этого периода даты.

Как бы вы пошли о модульном тестировании для такой вещи... вот мой репозиторий тестовых транзакций.

открытый класс TestTransactionsRepository: ITransactionsRepository {private IList db; 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()
{
    IList Transactions = TransactionsRepository.Get()
                                        .Between(thisDate, thatDate)
                                        .К списку();

    Assert.AreEqual(xx, Transactions.Count);
}

И тогда это мой метод фильтра

public static IQueryable Between (это IQueryable qry, DateTime startDate, DateTime endDate)
{
    возврат из т в qry
           где t.Date >= startDate && t.Date <= endDate
           выберите т;
}

2 ответа

Решение

Вам нужен вариант формы .Add (или из CreateTransaction), который позволяет вам "ввести" (поддельную) дату именно для таких целей тестирования.

Вы можете использовать те же приемы, которые описаны в разделе " Как выполнить модульное тестирование для конкретного машинного поведения?", Для внедрения / использования / создания / тестирования с определенными датами.

Другие вопросы по тегам