Пересмешивающий метод CreateAsync UserManager в Identity Core - PullRequest
0 голосов
/ 16 марта 2019

Я пытаюсь смоделировать метод CreateAsync () userManager.

Я использую ASP.Net Core 2.1.

Я издевался над методом FindByNameAsync ().

Я читал в другом месте, что в методе Identity 2.0 CreateAsync () использует методы ValidateAsync.

  • Я высмеял оба.
  • Я не знаю, как передать userManager смоделированныйвалидатор в качестве параметра.
  • Я всегда получаю сообщение об ошибке, в котором говорится, что конструктор не распознает параметры.
  • Я получаю результат идентификации как нулевой, даже с помощью имитированного менеджера пользователей.

Контрольный пример:

    Mock<SurveyContext> mockdb = new Mock<SurveyContext>();
    var mockValidator = new Mock<IUserValidator<IdentityUser>>();
    mockValidator.Setup(x => x.ValidateAsync(It.IsIn<UserManager<IdentityUser>>(), It.IsAny<IdentityUser>())).Returns(Task.FromResult(IdentityResult.Success));
    var mockUserStore = new Mock<IUserStore<IdentityUser>>();
    var mockUserRoleStore = mockUserStore.As<IUserRoleStore<IdentityUser>>();
    var mockUserManager = new Mock<UserManager<IdentityUser>>(mockUserStore.Object,
            new Mock<IOptions<IdentityOptions>>().Object,
            new Mock<IPasswordHasher<IdentityUser>>().Object,
            new IUserValidator<IdentityUser>[0],
            new IPasswordValidator<IdentityUser>[0],
            new Mock<ILookupNormalizer>().Object,
            new Mock<IdentityErrorDescriber>().Object,
            new Mock<IServiceProvider>().Object,
            new Mock<ILogger<UserManager<IdentityUser>>>().Object);


    var mockRoleStore = new Mock<IRoleStore<IdentityRole>>();
    var mockRoleManager = new Mock<RoleManager<IdentityRole>>(
                 mockRoleStore.Object, null, null, null, null);

    mockdb.Setup(x => x.Add(addMember)).Returns((Microsoft.EntityFrameworkCore.ChangeTracking.EntityEntry<MemberInfo>)null);
    mockdb.Setup(x => x.SaveChanges()).Returns(0);
    mockUserManager.Setup(x => x.CreateAsync(It.IsAny<IdentityUser>(), "password")).Returns(Task.FromResult(IdentityResult.Success));

    mockUserManager.Setup(x => x.FindByNameAsync(It.IsAny<string>()))
     .Returns(Task.FromResult(It.IsAny<IdentityUser>()));


    mockUserManager.Setup(x => x.AddToRoleAsync(new IdentityUser()
    {
        UserName = "username"

    }, "password")).Returns(Task.FromResult(IdentityResult.Success));
    mockRoleManager.Setup(x => x.RoleExistsAsync("")).ReturnsAsync(true);
    mockRoleManager.Setup(x => x.CreateAsync(new IdentityRole())).Returns(Task.FromResult(IdentityResult.Success));

Всякий раз, когда я использую метод createasync вопреки ожиданиям, я получаю нулевой результат.

Что яделать неправильно?

...