2014-09-15 3 views
1

Я хочу дать возможность администратору изменить пароль пользователя.ASP.Net Identity 2 RemovePassword Mocking

Я делаю это так:

var result = await this.UserManager.RemovePasswordAsync(user.Id); 

if (result.Succeeded) 
{ 
    result = await this.UserManager.AddPasswordAsync(user.Id, viewModel.MotDePasse); 

    if (result.Succeeded) 
    { 
     return RedirectToAction("Edit", new { Id = viewModel.UserName }); 
    } 
    else 
    { 
     viewModel.Errors = string.Join("<br />", result.Errors); 
    } 
} 
else 
{ 
    viewModel.Errors = string.Join("<br />", result.Errors); 
} 

Когда я бегу, он работает. Но при попытке выполнить его тестирование я получаю сообщение об ошибке (в объекте результата): «Name Connot be null».

В моем модульном тестировании у меня есть TestInitialize вроде этого:

_mockUserStore = new Mock<IUserStore<ApplicationUser>>(); 
var passwordStore = this._mockUserStore 
         .As<IUserPasswordStore<ApplicationUser>>(); 
passwordStore.Setup(pm => pm.FindByIdAsync(It.IsAny<string>())) 
      .Returns(Task.FromResult<ApplicationUser>(new ApplicationUser() { Id = "id", Nom = "Name1" })); 

_userManager = new UserManager<ApplicationUser>(this._mockUserStore.Object); 

Как я могу решить эту проблему? Имя, на котором объект имеет значение null?

+1

Не могли бы вы добавить трассировку стека? UserManager, возможно, вызывает дополнительные функции в вашем хранилище пользователей, которые вы не настроили в своем тесте. Или что-то совсем другое! ;-) –

+0

В стеке вызовов ничего не происходит (или я не знаю, чтобы получить более сложный стек вызовов), как только я не поймаю никакого исключения: просто result.Errors. – boblemar

ответ

0

мне нужно импровизировать UserValidator так:

var mockUserValidator = new Mock<IIdentityValidator<ApplicationUser>>(); 
mockUserValidator.Setup(uv => uv.ValidateAsync(It.IsAny<ApplicationUser>())) 
       .Returns(Task.FromResult<IdentityResult>(IdentityResult.Success)); 

this._userManager.UserValidator = mockUserValidator.Object; 

И это работает.

3

Это UserValidator, вероятно, отклоняет обновление пользователя за отсутствие набора имен пользователей. Вы можете, вероятно, просто обнулять в UserValidator на менеджере пользователей

_userManager.UserValidator = null 
+0

С этим я получаю ArgumentNullException ... – boblemar

+0

Где у вас есть .Returns (Task.FromResult (новый ApplicationUser() {Id = "id", Nom = "Name1"})); изменить его, чтобы включить UserName = "someusername", и не устанавливайте UserValidator, как показано выше. Я не включил этот ответ, потому что он может не работать! –

+0

Ну ... это не работает: ошибка теперь «someusername» уже выполняется, если UserValidator! = Null. если UserValidator == null, ArgumentNullException. – boblemar