Как вы лучше всего справляетесь с тестами с датами? - PullRequest
0 голосов
/ 25 мая 2009

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

Ответы [ 2 ]

1 голос
/ 25 мая 2009

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

0 голосов
/ 25 мая 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...