无法将类型为“System.Linq.EnumerableQuery”的对象强制转换为
发布时间:2020-12-14 01:38:22 所属栏目:Windows 来源:网络整理
导读:我有一个使用以下方法的类,并使用Moq作为单元测试框架.我该如何模仿以下内容: FeedOptions feedOptions = new FeedOptions { MaxItemCount = 1000 }; var query = await _storeAccessClient.CreateDocumentQueryAsyncCustomEntity(_collectionLink,feedOpti
我有一个使用以下方法的类,并使用Moq作为单元测试框架.我该如何模仿以下内容:
FeedOptions feedOptions = new FeedOptions { MaxItemCount = 1000 }; var query = await _storeAccessClient.CreateDocumentQueryAsync<CustomEntity>(_collectionLink,feedOptions) .Where(c => c.DataType == _dataType) .OrderBy(c => c.StartTime,sortOrder) .AsDocumentQuery() .ExecuteNextAsync<CustomEntity>(); List<CustomEntity> result = query.ToList<CustomEntity>(); 任何帮助是极大的赞赏 !! 解决方法
您所要做的就是创建EnumerableQuery类的包装器,它继承自IQueryable和IDocumentQuery,如下所示:
internal class MockEnumerableQuery : IDocumentQuery<JTokenEx>,IOrderedQueryable<JTokenEx> { public IQueryable<JTokenEx> List; private readonly bool bypassExpressions; public MockEnumerableQuery(EnumerableQuery<JTokenEx> List,bool bypassExpressions = true) { this.List = List; this.bypassExpressions = bypassExpressions; } public IEnumerator<JTokenEx> GetEnumerator() { return List.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } public Expression Expression => List.Expression; public Type ElementType => typeof(JTokenEx); public IQueryProvider Provider => new MockQueryProvider(this,bypassExpressions); public void Dispose() { } public Task<FeedResponse<TResult>> ExecuteNextAsync<TResult>(CancellationToken token = new CancellationToken()) { BindingFlags flags = BindingFlags.NonPublic | BindingFlags.Instance; FeedResponse<JToken> feed = Activator.CreateInstance(typeof(FeedResponse<JToken>),flags,null,new Object[] { List.Select(j => (JToken) j),new NameValueCollection(),false,null},null) as FeedResponse<JToken>; return Task.FromResult(feed as FeedResponse<TResult>); } public Task<FeedResponse<dynamic>> ExecuteNextAsync(CancellationToken token = new CancellationToken()) { throw new NotImplementedException(); } public bool HasMoreResults { get; } } class MockQueryProvider : IQueryProvider { private readonly MockEnumerableQuery mockQuery; private readonly bool bypassExpressions; public MockQueryProvider(MockEnumerableQuery mockQuery,bool byPassExpressions) { this.mockQuery = mockQuery; this.bypassExpressions = byPassExpressions; } public IQueryable CreateQuery(Expression expression) { throw new NotImplementedException(); } public IQueryable<TElement> CreateQuery<TElement>(Expression expression) { if (!bypassExpressions) { mockQuery.List = mockQuery.List.Provider.CreateQuery<TElement>(expression) as IQueryable<JTokenEx>; } return (IQueryable<TElement>)mockQuery; } public object Execute(Expression expression) { throw new NotImplementedException(); } public TResult Execute<TResult>(Expression expression) { throw new NotImplementedException(); } } 现在你的mock返回EnumerableQuery,你返回这个MockEnumerableQuery类,你应该很好. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- active-directory – 失去与域的联系的计算机
- windows – 以编程方式在用户桌面上创建Web快捷方式
- jar 在windows 启动服务,卸载服务,停止端口
- Windows 10域登录(auth)到本地帐户
- 他为’Microsoft.WindowsAzure.ServiceRuntime.RoleEnviron
- GNU CC和Windows
- window.open浏览器弹出新窗口被拦截—原因分析和解决方案
- windows – 在控制台中显示希伯来语文本
- active-directory – Windows 2012 – 密码更改不起作用
- windows-authentication – STS不支持请求的身份验证方法