我在我的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;
}