繁体   English   中英

如果使用LINQ查询,是否需要对单元测试进行排序?

[英]If using LINQ For Queries, Do We Need to Unit-Test Sorting?

我的服务层的接口上有以下两种方法:

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,确保正确过滤,确保返回了最大行,等等)。

但是我的问题是-我如何测试第二种方法? 我需要两个吗? 鉴于唯一不同的是im使用.OrderBy(或.OrderByDescending)方法。

如果我正在测试,我是否只是在测试LINQ框架?

如果没有,我什至可以对此进行测试?

几个要点(可能很重要):

  1. 这是服务层上的方法,该服务层在使用Entity Framework 4.0实现的存储库中检索IQueryable。
  2. 对于我的单元测试, 服务层 (通过StructureMap)注入了一个模拟存储库,但是当我想进行集成测试时,我也手动将其切换到真实存储库

指导/最佳做法将不胜感激。

谢谢!

您需要对第二种方法进行单元测试,以确保它可以工作。 如果您重构某些东西来改变它的工作方式并修复第一个,那么您如何知道是否忘记修复第二个呢? 如果重构WithOrdering ,您将如何知道事情仍然有效? 我将有一个单元测试来测试升序,一个单元测试来测试降序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM