asp.net-mvc – 使用Moq查找DbSet(EntityFramework.Testing.Moq)
发布时间:2020-12-16 09:55:33 所属栏目:asp.Net 来源:网络整理
导读:我一直在使用Moq对象以及 EntityFramework.Testing.Moq扩展,我最近遇到了尝试进行查找的问题.我认为是对的,只是做这样的设置(来自文档): // Create some test datavar data = new ListBlog{ new Blog{ Id = 1,Name = "BBB" },new Blog{ Id = 2,Name = "CCC"
我一直在使用Moq对象以及
EntityFramework.Testing.Moq扩展,我最近遇到了尝试进行查找的问题.我认为是对的,只是做这样的设置(来自文档):
// Create some test data var data = new List<Blog> { new Blog{ Id = 1,Name = "BBB" },new Blog{ Id = 2,Name = "CCC" },new Blog{ Id = 3,Name = "AAA" } }; // Create a mock set and context var set = new Mock<DbSet<Blog>>() .SetupData(data); var context = new Mock<BloggingContext>(); context.Setup(c => c.Blogs).Returns(set.Object); // Create a BlogsController and invoke the Index action var controller = new BlogsController(context.Object); var result = await controller.Index(); 在控制器中,我可以这样做(再次,从文档): var query = db.Blogs.OrderBy(b => b.Name); 但是,当我尝试使用模型的密钥进行DbSet Find时,就像这样: var b = db.Blogs.Find(1); 我会回来的. 现在,我已经能够通过这样的设置来完成这项工作: context.Setup(m => m.Blogs.Find(It.IsAny<int>())) .Returns<object[]>(s => data.Find(d => d.Blogs == (int)s[0])); 但是我想知道我是不是首先做错了什么,如果我在某种程度上使事情变得复杂. 谢谢你的任何建议! 解决方法
如果查看SetupData方法的签名
public static Mock<DbSet<TEntity>> SetupData<TEntity>(this Mock<DbSet<TEntity>> mock,ICollection<TEntity> data = null,Func<object[],TEntity> find = null) where TEntity : class 您可以看到必须在该方法调用中指定查找谓词.通过这样做,您不必再进行额外调用来设置上下文. 你可以这样做: var set = new Mock<DbSet<Blog>>() .SetupData(data,objects => data.SingleOrDefault(d => d.Id == (int) objects.First())); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- ASP.NET中没有会话状态的用户身份验证
- 在ASP.NET Core应用程序中使用标准Active Direct
- asp.net-mvc – Visual Studio 2012 ASP.NET MVC
- asp.net – 什么时候应该使用工厂模式?
- 无法安装ASP.NET MVC 3 RC
- asp.net-core – 将参数传递给ASP.NET MVC 6中的
- asp.net – 禁用按钮但看起来很活跃
- asp.net-mvc – 尝试使用Moq模拟HtmlHelper时抛出
- controller – 基类中的ExecuteCore()在MVC 4 be
- asp-classic – 为ServerXMLHTTP请求设置超时
热点阅读