Asp.net mvc 使用Moq(EntityFramework.Testing.Moq)的DbSet-Find
我一直在使用Moq对象和扩展,最近我在尝试查找时遇到了一个问题。我的想法是正确的,简单地进行如下设置(从文档中): 但是,当我尝试使用模型的键进行DbSet查找时:Asp.net mvc 使用Moq(EntityFramework.Testing.Moq)的DbSet-Find,asp.net-mvc,entity-framework,moq,Asp.net Mvc,Entity Framework,Moq,我一直在使用Moq对象和扩展,最近我在尝试查找时遇到了一个问题。我的想法是正确的,简单地进行如下设置(从文档中): 但是,当我尝试使用模型的键进行DbSet查找时: var b = db.Blogs.Find(1); 我会回来的 现在,我可以通过如下方式进行设置来实现这一点: context.Setup(m => m.Blogs.Find(It.IsAny<int>())) .Returns<object[]>(s => data.Find(d =&g
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]));
var set = new Mock<DbSet<Blog>>()
.SetupData(data, objects => data.SingleOrDefault(d => d.Id == (int) objects.First()));
context.Setup(m=>m.Blogs.Find(It.IsAny()))
.Returns(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
public static Mock SetupData(此Mock Mock,ICollection data=null,Func find=null),其中tenty:class
您可以看到,必须在该方法调用中指定find谓词。通过这样做,您不必额外调用来设置上下文
您可以这样做:
context.Setup(m => m.Blogs.Find(It.IsAny<int>()))
.Returns<object[]>(s => data.Find(d => d.Blogs == (int)s[0]));
var set = new Mock<DbSet<Blog>>()
.SetupData(data, objects => data.SingleOrDefault(d => d.Id == (int) objects.First()));
var set=new Mock()
.SetupData(data,objects=>data.SingleOrDefault(d=>d.Id==(int)objects.First());
非常好,谢谢!如果可能的话,您能提供一个用法示例吗?@MikeWitt添加了一个快速示例。