【问题标题】:How to mock IdentityServerDbContext to add ApplicationUser如何模拟 IdentityServerDbContext 以添加 ApplicationUser
【发布时间】:2020-01-26 23:36:39
【问题描述】:

我尝试了以下代码,但它给出了例外:

            var mockIdsDbContext = new Mock<IdentityServerDbContext>();
            var applicationUser = new ApplicationUser()
            {
                Id = Guid.NewGuid().ToString(),
                Email = "shashikant0423@gmail.com",
                PhoneNumber = "999999999"
            };

            var usersTestData = new List<ApplicationUser>() { applicationUser };
            var users = MockDbSet(usersTestData);
            mockIdsDbContext.Setup(x => x.Users).Returns(userManager.Object.Users);

Mock<DbSet<T>> MockDbSet<T>(IEnumerable<T> list) where T : class, new()
    {
        IQueryable<T> queryableList = list.AsQueryable();
        Mock<DbSet<T>> dbSetMock = new Mock<DbSet<T>>();
        dbSetMock.As<IQueryable<T>>().Setup(x => x.Provider).Returns(queryableList.Provider);
        dbSetMock.As<IQueryable<T>>().Setup(x => x.Expression).Returns(queryableList.Expression);
        dbSetMock.As<IQueryable<T>>().Setup(x => x.ElementType).Returns(queryableList.ElementType);
        dbSetMock.As<IQueryable<T>>().Setup(x => x.GetEnumerator()).Returns(() => queryableList.GetEnumerator());
        //dbSetMock.Setup(x => x.Create()).Returns(new T());
        return dbSetMock;
    }

但我收到如下错误: 无法实例化类的代理:RenewPlus.IdentityServer.Data.IdentityServerDbContext。找不到无参数构造函数

【问题讨论】:

  • 能否给RenewPlus.IdentityServer.Data.IdentityServerDbContext添加一个无参数构造函数?

标签: unit-testing .net-core tdd asp.net-core-webapi identityserver4


【解决方案1】:

我建议不要模拟相当复杂的 DbContext,而是使用 Microsoft.EntityFrameworkCore.InMemory 驱动程序。

https://docs.microsoft.com/en-us/ef/core/providers/in-memory/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-26
    • 1970-01-01
    相关资源
    最近更新 更多