C# 如何对Asp.Net MVC Identity UserManager.ChangePasswordAsync进行单元测试

C# 如何对Asp.Net MVC Identity UserManager.ChangePasswordAsync进行单元测试,c#,asp.net-mvc,unit-testing,moq,C#,Asp.net Mvc,Unit Testing,Moq,我正在为我的家庭控制器编写单元测试用例,在家庭控制器中,我有一个名为MyProfile的操作方法,它在UserManager类中调用ChangePasswordAsync方法。如何测试应用程序用户管理器 下面是我的控制器代码 [HttpPost] [ValidateAntiForgeryToken] public async Task<ActionResult> MyProfile(ChangePasswordViewModel model) { if (!ModelState.

我正在为我的家庭控制器编写单元测试用例,在家庭控制器中,我有一个名为MyProfile的操作方法,它在UserManager类中调用ChangePasswordAsync方法。如何测试应用程序用户管理器

下面是我的控制器代码

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> MyProfile(ChangePasswordViewModel model)
{
  if (!ModelState.IsValid)
     {
       return View(model);
     }
var result = await UserManager.ChangePasswordAsync(User.Identity.GetUserId(), model.OldPassword, model.NewPassword);
    if (result.Succeeded)
       {
     var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());
      if (user != null)
        {
      await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
       }
      var verification_uid = Guid.NewGuid().ToString();


        }
[HttpPost]
[ValidateAntiForgeryToken]
公共异步任务MyProfile(ChangePasswordViewModel模型)
{
如果(!ModelState.IsValid)
{
返回视图(模型);
}
var result=await UserManager.ChangePasswordAsync(User.Identity.GetUserId(),model.OldPassword,model.NewPassword);
if(result.successed)
{
var user=await UserManager.FindByIdAsync(user.Identity.GetUserId());
如果(用户!=null)
{
等待SignInManager.SignInAsync(用户,isPersistent:false,rememberBrowser:false);
}
var-verification_-uid=Guid.NewGuid().ToString();
}

您没有。这是测试框架的一个主要示例,您不应该这样做。您需要为您的应用程序代码编写测试,而不是为标识或ASP.NET的任何其他部分编写测试。Microsoft已经对该代码进行了很好的测试。您可以放心地认为调用
ChangePasswordAsync
实际上会更改用户的密码否则,您正在运行的Identity release将无法通过测试运行,并且永远不会被释放。

我能够在测试中测试我的控制器代码。这很简单,可以完成任务,但请记住,控制器代码是应用层,对我的测试来说或多或少是一个黑盒……这意味着ChangePasswordAsync正在按预期工作我还必须编写自己的测试代码,在我的测试中按角色获得一个用户列表,以添加声明,所以我还在学习。希望这对我有所帮助

<TestMethod()> Public Sub Index()

        ' Arrange
        Dim controller As New HomeController()

        ' Act
        Dim result As ViewResult = DirectCast(controller.Index(), ViewResult)

        ' **Assert that your change password returns the expected model**
        Assert.IsNotNull(result)
    End Sub
公共子索引()
“安排
Dim控制器作为新的HomeController()
“行动
Dim结果作为ViewResult=DirectCast(controller.Index(),ViewResult)
'**断言您的更改密码将返回预期的型号**
Assert.IsNotNull(结果)
端接头

file-->mvc 5中的新项目生成测试控制器的测试代码…您如何建议测试更改密码操作结果?使用一个密码模拟用户,使用其他密码运行操作。在用户上断言密码是新密码而不是旧密码。相当标准的测试设置。