Я пытаюсь смоделировать метод 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 вопреки ожиданиям, я получаю нулевой результат.
Что яделать неправильно?