【发布时间】:2014-09-15 13:33:45
【问题描述】:
我想让管理员可以更改用户的密码。
我是这样做的:
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);
}
当我运行它时,它可以工作。 但是在尝试对其进行单元测试时,我收到一个错误(在结果对象中):“名称不能为空”。
在我的单元测试中,我有一个这样的 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);
我该如何解决?哪个对象上的名称为空?
【问题讨论】:
-
你能添加一个堆栈跟踪吗? UserManager 可能正在调用您尚未在测试中设置的用户存储上的其他功能。或者完全不同的东西! ;-)
-
只要我没有捕捉到任何异常,调用堆栈中就没有任何有趣的东西(或者我不知道要获得更深的调用堆栈):只是 result.Errors。
标签: asp.net-mvc unit-testing moq asp.net-identity