繁体   English   中英

Mocking 实体框架使用 Moq 不返回 DbSet<t></t>

[英]Mocking Entity Framwork using Moq not returning DbSet<T>

我有一个我已经模拟和公开的 DbSet。 我已经根据上下文填充了一些部门。 现在,当我访问这些部门时,我得到 null。

    private Mock<DbSet<Department>> departmentSet;
    private Mock<DemoEntities> context;

    [TestInitializeAttribute()]
    public void TestInit()
    {
        context = new Mock<DemoEntities>();
        departmentSet = new Mock<DbSet<Department>>();
        context.Setup(c => c.Departments).Returns(departmentSet.Object);
        context.Object.Departments.Add(new Department() { Name = "HR", Id = 1 });
        context.Object.Departments.Add(new Department() { Name = "Operations", Id = 2 });


        context.Object.SaveChanges();

        var list = context.Object.Departments; //returns null
     }

谁能让我知道我做错了什么。 由于测试用例的 rest 依赖于访问 context.Object.Departments。

您需要如下模拟.Set<>

 private static Mock<DbSet<T>> GetDbSetMock<T>(IEnumerable<T> items = null) where T : class
        {
            if (items == null)
            {
                items = new T[0];
            }

            var dbSetMock = new Mock<DbSet<T>>();
            var q = dbSetMock.As<IQueryable<T>>();

            q.Setup(x => x.GetEnumerator()).Returns(items.GetEnumerator);

            return dbSetMock;
        }



var mockContext = new Mock<MyDbContext>();

var users = new List<User> { new User { Email = "my@email.com", Id = 1 } };

mockContext.Setup(x => x.Set<User>()).Returns(GetDbSetMock(users).Object);

有没有办法返回 null 值? 所以代替: .Returns(GetDbSetMock(departments).Object); 像这样的东西? .Returns(GetDbSetMock(null).Object); 我有一个单元测试正在从数据库中寻找 null 响应。

不知道如何模拟它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM