Тест имеет нулевой IdentityResult - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть метод

  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);
    }

, который создает роль, он работает правильно, но когда я хочу сделать фиктивный тест, у меня нулевой 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;
    }

null в этой точке

enter image description here

и ошибка называется NullReferenceException object reference does not indicate an object instance.

1 Ответ

0 голосов
/ 14 февраля 2019

Думаю, это потому, что ввод не совпадает.Ваша установка использует один экземпляр RoleModel, а затем фактический вызов метода использует другой, созданный внутри CreateRole.

Настройте его так, чтобы он мог принимать любой объект:

mockRole.Setup(m => m.CreateRoleAsync(It.IsAny<RoleModel>()))
        .Returns(successResult);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...