我的服务层接口有以下两种方法:
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;
他们非常相似。
第一个(基本上)这样做:
return repository
.Find()
.OfType<T>()
.Where(predicate)
.Take(maxRows)
.ToList();
第二个(基本上)这样做:
return repository
.Find()
.OfType<T>()
.Where(predicate)
.WithOrdering(orderingOptions)
.Take(maxRows)
.ToList();
WithOrdering
是我创建的管道扩展方法:
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>
是我实现的通用类,用于提供流畅的排序。
所以,据说 - 我对第一个方法进行了大量的单元测试(确保返回集合,确保为空集合返回null,确保正确过滤,确保返回最多行等)。
但我的问题是 - 如何测试第二种方法?我需要两个吗?鉴于唯一不同的是我使用.OrderBy(或.OrderByDescending)方法。
如果即时测试,我只是测试LINQ框架吗?
如果没有,我怎么能测试这个?
几点(可能很重要)要点:
指导/最佳实践将受到高度赞赏。
谢谢!
答案 0 :(得分:2)
您需要对第二种方法进行单元测试,以确保其正常工作。如果你重构改变它的工作方式并修复第一个的东西,你怎么知道你是否忘了修复第二个?如果你重构WithOrdering
,你怎么知道事情仍然有效?我会有一个单元测试来测试升序,一个测试下降。