2009-05-25 3 views
0

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

ответ

1

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

Смежные вопросы