首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用Moq (EntityFramework.Testing.Moq)查找DbSet

用Moq (EntityFramework.Testing.Moq)查找DbSet
EN

Stack Overflow用户
提问于 2015-09-07 17:13:16
回答 1查看 2K关注 0票数 5

我一直在使用Moq对象以及EntityFramework.Testing.Moq扩展,最近我遇到了一个尝试查找的颠簸。我的想法是正确的,简单地做这样的设置(从文档中):

代码语言:javascript
运行
复制
// 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();

在控制器中,我可以(同样地,从文档中)这样做:

代码语言:javascript
运行
复制
var query = db.Blogs.OrderBy(b => b.Name);

但是,当我尝试做一个DbSet查找时,像这样使用模型的键:

代码语言:javascript
运行
复制
var b = db.Blogs.Find(1);

我会得到回零。

现在,我已经能够通过这样的设置来完成这个工作:

代码语言:javascript
运行
复制
context.Setup(m => m.Blogs.Find(It.IsAny<int>()))
   .Returns<object[]>(s => data.Find(d => d.Blogs == (int)s[0]));

但我只想知道,我是否做错了什么,在一开始,如果我是过度复杂的事情。

谢谢你的建议!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-07 17:39:18

如果您查看SetupData方法的签名

代码语言:javascript
运行
复制
public static Mock<DbSet<TEntity>> SetupData<TEntity>(this Mock<DbSet<TEntity>> mock, ICollection<TEntity> data = null, Func<object[], TEntity> find = null) where TEntity : class

您可以看到,必须在该方法调用中指定查找谓词。通过这样做,您不需要做额外的调用来设置您的上下文。

你可以这样做:

代码语言:javascript
运行
复制
var set = new Mock<DbSet<Blog>>()
    .SetupData(data, objects => data.SingleOrDefault(d => d.Id == (int) objects.First()));
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32443410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档