gpt4 book ai didi

c# - 为 RoleManager 和 UserManager 创建实例以进行单元测试?

转载 作者:太空宇宙 更新时间:2023-11-03 14:40:13 25 4
gpt4 key购买 nike

我目前正在尝试使用依赖于 UserManager 和 RoleManager 的 C# 进行测试。我 mock 了他们,但这没有帮助,另外我得到一个异常,说明模拟对象不能转换为 User 或 RoleManager。

我的问题是:您知道如何创建 UserManager 和 RoleManager 的实例而不在它们的参数中传递扩充吗?这样实例将用于测试目的?

public Object MockedUserManager()
{
var mockUserManager = new Mock<UserManager<User>>(
new Mock<IUserStore<User>>().Object,
new Mock<IOptions<IdentityOptions>>().Object,
new Mock<IPasswordHasher<User>>().Object,
new IUserValidator<User>[0],
new IPasswordValidator<User>[0],
new Mock<ILookupNormalizer>().Object,
new Mock<IdentityErrorDescriber>().Object,
new Mock<IServiceProvider>().Object,
new Mock<ILogger<UserManager<User>>>().Object);
return mockUserManager.Object;
}

提前致谢!

最佳答案

我使用了这个扩展方法,你可以注意到它返回一个 Mock 实例,这样你就可以在单元测试中设置你需要的任何行为。

public static Mock<UserManager<TUser>> GetUserManagerMock<TUser>()
where TUser: BaseCfUser
{
var store = new Mock<IUserStore<TUser>>();
var userManagerMock = new Mock<UserManager<TUser>>(store.Object, null, null, null, null, null, null, null, null);
userManagerMock.Object.UserValidators.Add(new UserValidator<TUser>());
userManagerMock.Object.PasswordValidators.Add(new PasswordValidator<TUser>());
return userManagerMock;
}

关于c# - 为 RoleManager 和 UserManager 创建实例以进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57291677/

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