首页 > 解决方案 > 测试有 null IdentityResult

问题描述

我有方法

  public async Task<ActionResult> CreateRole(RoleModel roleViewModel)
    {
        if (ModelState.IsValid)
        {
            RoleModel role = new RoleModel(roleViewModel.Name);

            // Save the new Description property:
            role.Description = roleViewModel.Description; // <--- Here you have assign the Description value

            IdentityResult roleResult = await roleManager.CreateRoleAsync(role);

            if (roleResult.Succeeded)
            {
                return RedirectToAction("Index");
            }
            else
            {
                AddErrorsFromResult(roleResult);
            }
        }
        return View(roleViewModel);
    }

它创建了角色,它工作正常,但是当我想进行模拟测试时,我有 null IdentityResult。我无法理解是什么问题。

我的测试

public async Task CanCreateRoleAsync()
    {
        //arrange
        Task<IdentityResult> successResult = Task.FromResult(IdentityResult.Success);
        Mock<IRoleManagerRepository> mockRole = new Mock<IRoleManagerRepository>();
        Mock<IUserManagerRepository> mockUser = new Mock<IUserManagerRepository>();
        RoleController controller = new RoleController(mockRole.Object, mockUser.Object);

        RoleModel model = new RoleModel { Id = "test-test-test-test", Name = "test", Description = "test user" };

        mockRole.Setup(m => m.CreateRoleAsync(model)).Returns(successResult);

        //action
        ActionResult result = await controller.CreateRole(model);

        //assert
        Assert.IsInstanceOfType(result, typeof(RedirectToRouteResult));
    }

以及创建角色的方法

public async Task<IdentityResult> CreateRoleAsync(RoleModel applicationRole)
    {
        IdentityResult result = await userRole.CreateAsync(applicationRole);
        return result;
    }

在这一点上为空

在此处输入图像描述

并称为错误NullReferenceException object reference does not indicate an object instance.

标签: c#asp.net-mvcmoq

解决方案


猜是因为输入不匹配。您的设置使用一个 RoleModel 实例,然后实际的方法调用使用另一个在内部创建的CreateRole

设置它以便它可以接受任何对象:

mockRole.Setup(m => m.CreateRoleAsync(It.IsAny<RoleModel>()))
        .Returns(successResult);

推荐阅读