J'ai les deux méthodes suivantes sur une interface pour ma couche de service:Si vous utilisez LINQ For Queries, devons-nous effectuer un tri par unité de test?
ICollection<T> FindAll<T>(Expression<Func<T, bool>> predicate) where T : Post;
ICollection<T> FindAll<T,TKey>(Expression<Func<T, bool>> predicate, OrderingOptions<T,TKey> orderingOptions) where T : Post;
Ils sont très similaires.
La première (essentiellement) Est-ce que:
return repository
.Find()
.OfType<T>()
.Where(predicate)
.Take(maxRows)
.ToList();
Le second (essentiellement) Est-ce que:
return repository
.Find()
.OfType<T>()
.Where(predicate)
.WithOrdering(orderingOptions)
.Take(maxRows)
.ToList();
WithOrdering
est une méthode d'extension de tuyau i créé:
public static IOrderedQueryable<T> WithOrdering<T,TKey>(this IQueryable<T> source, OrderingOptions<T,TKey> postOrderingOptions)
{
return postOrderingOptions.SortAscending
? source.OrderBy(postOrderingOptions.OrderingKey)
: source.OrderByDescending(postOrderingOptions.OrderingKey);
}
OrderingOptions<T,TKey>
est une classe générique i mis en œuvre pour fournir o fluent frotter. Donc, cela étant dit - j'ai de nombreux tests unitaires pour la première méthode (s'assurer que la collection est retournée, s'assurer que la valeur null est retournée pour une collection vide, s'assurer que le filtre est correctement filtré, etc. Mais ma question est - comment puis-je tester la deuxième méthode? Ai-je besoin de deux? Étant donné que la seule chose qui est différente est que im en utilisant les méthodes .OrderBy (ou .OrderByDescending).
Si je suis en train de tester cela, est-ce que je teste simplement le framework LINQ?
Sinon, comment puis-je même tester cela?
Couple de (peut-être important) points:
- Ce sont des méthodes sur une couche de service , qui extraient des années IQueryable sur un dépôt , qui est mis en œuvre avec Entity Framework 4.0
- Pour mon unité -tests, la couche de service est injectée (via StructureMap) dans un référentiel simulé, mais je le bascule également manuellement vers le référentiel manuellement lorsque je veux faire des tests d'intégration
Des conseils/bonnes pratiques seraient grandement appréciés.
Merci!
D'accord. Mais comment puis-je tester cette unité? Devrai-je (par exemple) saisir 3 éléments dont je connais la date (en utilisant une méthode pour obtenir un seul élément), puis saisir 3 éléments classés par date (en utilisant la seconde méthode) et comparer les valeurs manuellement? (c'est-à-dire les éléments de liste ordonnée [0] .date == firstItem.date?) – RPM1984
RPM1984: Vous pouvez récupérer 3 éléments et 'Assert (items [0] .date <= items [1] .date && items [1] .date <= items [2] .date) 'pour ascendant et' Assert (items [0] .date> = items [1] .date && items [1] .date> = items [2] .date) 'pour descendre. – Gabe
Oui, c'est ce que je pensais. D'accord, applaudissements.+1, mais je vais laisser la question ouverte un peu (juste pour que je puisse voir les pensées des autres). Merci. – RPM1984