簡體   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