2009-05-25 32 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),讓你「注入」一個(假的)日期,正是這樣的測試目的。

相關問題