Тестирование usermanager создает пользователя, но пароль ha sh свойство равно нулю - PullRequest
1 голос
/ 19 апреля 2020

Я работаю с Microsoft.AspNetCore.Identity.UserManager и пытаюсь издеваться над созданием нового пользователя. Фактически, он создает нового пользователя с именем пользователя, электронной почтой и т. Д. c. но свойство пароля ha sh по-прежнему равно нулю.

Вот как я настраивал mock usermanager с некоторыми дополнительными настройками:

        var store = new Mock<IUserPasswordStore<User>>();

        var validator = new UserValidator<User>();
        var passValidator = new PasswordValidator<User>();

        var mgr = new Mock<UserManager<User>>(store.Object, null, null, null, null, null, null, null, null);
        mgr.Object.UserValidators.Add(validator);
        mgr.Object.PasswordValidators.Add(passValidator);
        mgr.Object.PasswordHasher = new PasswordHasher<User>();
        mgr.Object.Options = AuthenticationRules.DefaultAuthenticationRules();

        List<User> users= new List<User>();

        mgr.Setup(x => x.DeleteAsync(It.IsAny<User>())).ReturnsAsync(IdentityResult.Success);
        mgr.Setup(x => x.CreateAsync(It.IsAny<User>(), It.IsAny<string>())).ReturnsAsync(IdentityResult.Success).Callback<User, string>((x, y) => users.Add(x));
        mgr.Setup(x => x.UpdateAsync(It.IsAny<User>())).ReturnsAsync(IdentityResult.Success);

DefaultAuthenticationRules возвращает это:

    public static IdentityOptions DefaultAuthenticationRules(IdentityOptions identityOptions = null)
    {
        if(identityOptions == null)
            identityOptions = new IdentityOptions();

        identityOptions.User.RequireUniqueEmail = true;
        identityOptions.Password.RequireNonAlphanumeric = false;
        identityOptions.Password.RequiredUniqueChars = 0;

        return identityOptions;
    }

Затем я передаю mgr .Объект к методу, который обрабатывает создание нового пользователя, где 'Object' заполнен _userManager

        var creationResult = await _userManager.CreateAsync(_user, _registrationModel.Password);

        if (!creationResult.Succeeded)
            return false;

        return true;

_registrationModel.Password IS заполнен.

Так что теперь, когда установка добавляет нового пользователя в обратном вызове в список пользователей, пользователь заполняется без пароля ha sh. Я не совсем уверен, что мне здесь не хватает. Я что-то упускаю в mgr.Setup?

Заранее спасибо

1 Ответ

1 голос
/ 19 апреля 2020

Ваша функция обратного вызова Callback<User, string>((x, y) => users.Add(x)); будет выполнена после завершения теста, она примет в качестве параметра значение того же , которое вы передадите в проверяемый метод, в вашем случае пароль вероятно, пустая строка или ноль.

_registrationModel.Password заполнен.

Хорошо, но внутренний код, генерирующий какой-либо пароль, не влияет на параметры (x,y) => {..}.

См. Этот код (скопировано из этого отличного ответа):

public interface IFoo
{
    int Bar(bool b);
}

var mock = new Mock<IFoo>();

mock.Setup(mc => mc.Bar(It.IsAny<bool>()))
    .Callback<bool>(b => Console.WriteLine("Bar called with: " + b))
    .Returns(99999);

var ret1 = mock.Object.Bar(true);
Console.WriteLine("Result ret1: " + ret1);
var ret2 = mock.Object.Bar(false);
Console.WriteLine("Result ret2: " + ret2);

//OUTPUT:
//Result ret1: true.
//Result ret1: false.

В примере, независимо от того, что происходит внутри метода Bar, выходные данные будут зависеть только по значению вызываемого параметра для фиктивной функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...