gpt4 book ai didi

c# - 模拟 ApplicationUser 并提供角色

转载 作者:行者123 更新时间:2023-11-30 21:42:58 24 4
gpt4 key购买 nike

我正在尝试为我的模拟 ApplicationUserManager 提供一个 ApplicationUser。当我尝试添加角色时,我注意到 Roles 是一个只读属性。不确定在我的测试中实现的最佳方式。

[TestMethod]
public void AccountPerission_PermissionScope()
{
//Arrange
IRolePermissionSvc roleService = GetRoleService();
IUserPermissionSvc userService = GetUserService();

AccountController controller = new AccountController(
_applicationUserManager.Object,
null,
_staffTypeSvc.Object,
_militaryBaseSvc.Object,
_positionTitleSvc.Object,
userService,
roleService
);

var appUser = new ApplicationUser()
{
FirstName = "test",
LastName = "tester",
Id = "02dfeb89-9b80-4884-b694-862adf38f09d",
Roles = new List<ApplicationRoles> { new ApplicationRole { Id = "1" } } // This doesn't work.
};

//Act
_applicationUserManager.Setup(x => x.FindByIdAsync(It.IsAny<string>())).Returns(Task.FromResult<ApplicationUser>(appUser));
Task<PartialViewResult> result = controller.AjaxResetUserPermission(appUser.Id, 1);

//Assert
Assert.IsNotNull(result);
}

最佳答案

虽然 Roles 是只读属性,但它是 virtual,这意味着它可以在派生类中被覆盖。因此,您可以创建一个派生自 ApplicationUser

的类
public class MockApplicationUser : ApplicationUser {
private readonly ICollection<ApplicationRoles> roles

public MockedApplicationUser(List<ApplicationRoles> roles) : base() {
this.roles = roles;
}

public override ICollection<ApplicationRoles> Roles {
get { return roles; }
}
}

并在测试中使用它

var appUser = new MockApplicationUser(new List<ApplicationRoles> { new ApplicationRole { Id = "1" } })
{
FirstName = "test",
LastName = "tester",
Id = "02dfeb89-9b80-4884-b694-862adf38f09d"
};

或模拟 ApplicationUser 并设置 Roles 属性

var roles = new List<ApplicationRoles> { new ApplicationRole { Id = "1" } };
var appUserMock = new Mock<ApplicationUser>();
appUserMock.SetupAllProperties();
appUserMock.Setup(m => m.Roles).Returns(roles);

var appUser = appUserMock.Object;
appUser.FirstName = "test";
appUser.LastName = "tester";
appUser.Id = "02dfeb89-9b80-4884-b694-862adf38f09d";

顺便说一句,测试方法也可以异步

[TestMethod]
public async Task AccountPerission_PermissionScope() {
//Arrange

//..code removed for brevity

_applicationUserManager
.Setup(x => x.FindByIdAsync(It.IsAny<string>()))
.ReturnsAsync(appUser);

//Act
var result = await controller.AjaxResetUserPermission(appUser.Id, 1);

//Assert
Assert.IsNotNull(result);
}

关于c# - 模拟 ApplicationUser 并提供角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42123869/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com