2009-05-25 56 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 = ?? 
     }; 
    } 
} 

这是一个示例测试scnenario。

 
[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),让你“注入”一个(假的)日期,正是这样的测试目的。

相关问题