asp.net-mvc – 如何使用Moq模拟存储库Single(Expression> pr
发布时间:2020-12-16 09:59:38 所属栏目:asp.Net 来源:网络整理
导读:我正在玩.NET MVC,我正在编写一些单元测试.我有一个接口存储库,如下所示: public interface IRepositoryTEntity : IDisposable where TEntity : class{ IQueryableTEntity GetAll(); TEntity Single(ExpressionFuncTEntity,bool predicate);} 我像这样嘲笑
我正在玩.NET MVC,我正在编写一些单元测试.我有一个接口存储库,如下所示:
public interface IRepository<TEntity> : IDisposable where TEntity : class { IQueryable<TEntity> GetAll(); TEntity Single(Expression<Func<TEntity,bool>> predicate); } 我像这样嘲笑了GetAll方法: _mockRepository.Setup(x => x.GetAll()).Returns( new List<Post> { new Post { Title = "Test Post 1" },new Post { Title = "Test Post 2" } }.AsQueryable()); 现在我不确定如何模拟Single方法,因为它有一个包含我想要评估的表达式的参数. 谢谢, B3N 编辑: 我将代码更改为: _mockRepository.Setup(x => x.Single(It.IsAny<Expression<Func<Post,bool>>>())) .Returns( (Expression<Func<Post,bool>> expr) => new List<Post> { new Post { PostId = 1,Title = "Test Post 1",Created = DateTime.Now },new Post { PostId = 2,Title = "Test Post 2",Created = DateTime.Now } }.Where(expr)); 但是我现在收到以下错误: ‘System.Collections.Generic.List’不包含’Where’的定义和最佳扩展方法重载’System.Linq.Queryable.Where(System.Linq.IQueryable,System.Linq.Expressions.Expression>)’一些无效的论点. 这甚至是做到这一点的最佳方法,还是单一方法只返回一个新帖子而不考虑传入的表达式? 编辑2: 这是工作结果. _mockRepository.Setup(x => x.Single(It.IsAny<Expression<Func<Post,bool>>>())).Returns( (Expression<Func<Post,bool>> expr) => new List<Post> { new Post { PostId = 1,Created = DateTime.Now } }.Single(expr.Compile())); 解决方法
我相信如果你需要使用参数,你可以在Returns方法中使用参数匹配器和lambda:
_mockRepository.Setup(x => x.Single(It.IsAny<Expression<Func<TEntity,bool>>>()) .Returns((Expression<Func<TEntity,bool>> expr) => ... ); 编辑: _mockRepository.Setup(x => x.Single(It.IsAny<Expression<Func<Post,bool>>>())) .Returns( (Expression<Func<Post,bool>> expr) => new List<Post> { new Post { PostId = 1,Created = DateTime.Now } }.Where(expr.Compile())); Compile()会将表达式树转换为简单的Func委托.此外,由于mocked方法返回单个对象,因此Where()也不起作用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net – HttpContext.GetGlobalResourceObject始终返回n
- ASP.NET 打开新页面或页面跳转
- PagesSection.ValidateRequest是否足以阻止asp.Net中的XSS
- 使用Asp.net在jquery中更改事件
- asp.net – 将服务器端事件添加到扩展程序控件
- ASP.Net WCF服务的Thread.CurrentPrincipal被联邦(WIF)环境
- asp.net中的GridView分页问题
- asp.net-mvc-4 – 如何在MVC4中呈现远程ReportViewer aspx页
- asp.net-mvc – ASP.NET MVC局部视图慢?
- asp.net – 表单身份验证何时不应该超时?
推荐文章
站长推荐
- ASP.NET MVC:如果url与当前url匹配,则将选定的C
- asp.net – 为什么我在Web.Release.config XML-D
- 双应用程序域在ASP.NET 4应用程序
- asp.net-mvc – ASP.NET MVC中的Razor页面生命周
- 在ASP.net Webforms中,如何检测有人按下哪个文本
- asp.net-mvc-4 – MVC 4 Web API中的默认参数值
- asp.net-mvc – Microsoft ASP .NET Web API,MVC
- asp.net-mvc – 如何将httppostedfilebase转换为
- asp.net-mvc – MVC3自定义输出缓存
- asp.net-mvc – 为什么Visual Studio不会在发布中
热点阅读