c# - 测试有 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.
解决方案
猜是因为输入不匹配。您的设置使用一个 RoleModel 实例,然后实际的方法调用使用另一个在内部创建的CreateRole
。
设置它以便它可以接受任何对象:
mockRole.Setup(m => m.CreateRoleAsync(It.IsAny<RoleModel>()))
.Returns(successResult);
推荐阅读
- algorithm - 如何以最小的相邻元素交换对数组进行排序
- python - ValueError:使用参数lines = True在panda中读取json时的预期对象或值
- java - 如何检查字符串以空格开头或结尾
- php - 如何从多个输入文本中获取隐藏值?
- php - 使用一些记录创建文件集
- swift - swift中的协议继承和结构
- c - 我安装了 gcc,但是当我编译我的代码时,clang 出现了问题
- python - 如何计算每个 ID 自 event==1 以来所覆盖的距离
- javascript - html中实际使用的父节点和子节点是什么?
- c# - 如何仅在 ASP.NET Core 中禁用用于开发的缓存?