簡體   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