Mocking new Microsoft Entity Framework Identity UserManager and RoleManager

后端 未结 6 512
我寻月下人不归
我寻月下人不归 2020-12-08 13:46

Has anyone come up with a successful mocking solution for UserManager and RoleManager? I have been beating my head against a wall all day. All I wa

6条回答
  •  南笙
    南笙 (楼主)
    2020-12-08 14:02

    Here is an explicit version of Rubito's excellent answer for NET Core 3.1 without the null, null, nulls:

    public static UserManager GetUserManager(IUserStore store = null) 
        where TUser : class
    {
        // https://github.com/aspnet/Identity/blob/master/test/Shared/MockHelpers.cs
        store = store ?? new Mock>().Object;
        var options = new Mock>();
        var idOptions = new IdentityOptions();
        idOptions.Lockout.AllowedForNewUsers = false;
        options.Setup(o => o.Value).Returns(idOptions);
        var userValidators = new List>();
        var validator = new Mock>();
        userValidators.Add(validator.Object);
        var pwdValidators = new List>();
        pwdValidators.Add(new PasswordValidator());
        var userManager = new UserManager(
            store: store, 
            optionsAccessor: options.Object, 
            passwordHasher: new PasswordHasher(),
            userValidators: userValidators,
            passwordValidators: pwdValidators, 
            keyNormalizer: new UpperInvariantLookupNormalizer(),
            errors: new IdentityErrorDescriber(), 
            services: null,
            logger: new Mock>>().Object);
        validator.Setup(v => v.ValidateAsync(userManager, It.IsAny()))
            .Returns(Task.FromResult(IdentityResult.Success)).Verifiable();
        return userManager;
    }
    

提交回复
热议问题