2009-05-25 10 views
0

Ich verwende ein Repository-Muster mit Filtern in meiner MVC-Anwendung. Das Projekt zeigt eine Liste von Transaktionen an, in denen ich eine Datumsperiode angeben kann, um eine Teilmenge von Transaktionen zu erhalten, oder ein bestimmtes Datum anzugeben, um Transaktionen für dieses Datum zu erhalten (einschließlich Jahr, Jahr/Monat und Jahr/Monat/Tag).Wie gehen Sie am besten mit Tests mit Daten um?

Ich habe auch Funktionalität für Paging die nächsten und vorherigen Transaktionen basierend auf welcher Art von Sicht, die wir betrachten. Wenn wir beispielsweise alle Transaktionen für ein bestimmtes Jahr/einen bestimmten Monat auswählen, dann finde ich die nächsten vorherigen und nächsten Transaktionen basierend auf dieser Datumsperiode.

Wie würden Sie Unit Tests für so etwas tun ... hier ist meine Mock Transaktions-Test-Repository.

 
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 = ?? 
     }; 
    } 
} 

Hier ist ein Beispiel Test 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); 
} 

Und dann ist meine Filtermethode

 
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; 
} 

Antwort

1

Sie benötigen eine Variante Form von .Add (oder von CreateTransaction), die Sie „injizieren“, um ein (gefälschtes) Datum läßt, genau für solche Testzwecke .

Verwandte Themen