我在企業環境中工作,我們的前端(客戶端和Web)沒有直接的數據庫訪問權限,而是通過網絡與服務通話。概念工作的證明已經開始用於外部可用的ASP.Net Web API,並且我們正在考慮嘗試使用IQueryable的實現來使用OData。問題是Web API將成爲另一個訪問網絡跳躍的服務層的「前端」,這意味着我們必須編寫自己的IQueryable實現。你會如何測試ExpressionVisitor?
一個IQueryable實現就是我所說的一個RangeQueryable,它將是抽象的並帶有三個通用參數; TRaw,TData,TRange。這將是一個IQueryable<TData>
var queryable = new RangeQueryableImplementation<RawData, ConvertedData, DateTime>("Created");
在上面的代碼行RAWDATA是TRaw,ConvertedData是TDATA和DateTime是TRANGE。
RangeQueryable也會有兩個抽象方法。
public abstract IEnumerable<TRaw> GetData(TRange from, TRange to);
public abstract TData Convert(TRaw raw);
的GetData將會對業務層的調用在網絡上,並使用from
和to
作爲調用參數。轉換然後將數據轉換爲我的類型。
TRaw是服務返回的類型,TData是前端內的類型和IQueryable內的類型,TRange是範圍類型。
因此,這將是可能的:
queryable.Where(d => d.Created < DateTime.Now && d.Created > DateTime.Now.AddDays(-5))
...或等同的OData。
這是ExpressionVisitor的用途。我需要使用ExpressionVisitor來查找From和To日期。
我看了一些教程,並提出了一些想法。我遇到的問題是我不知道如何單元測試ExpressionVisitor。我將如何創建一個與Queryable擴展方法創建的表達式相等的表達式?