私は、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; }