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

标签 c# authentication asp.net-identity owin

我目前正在尝试使用依赖于 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/

相关文章:

c# - 在 C# 中,如何查看帐户中的第一个字符是否为特定值?

c# - 应用程序似乎有两个 session cookie

javascript - meteor 收集.allow

asp.net-mvc - 包含 MVC 5 详细信息的注册用户列表

asp.net - 如何使用 IdentityServer v3 保护 IdentityManager

c# - 查看模型虚拟属性和下拉列表

c# - C# 中的时间延迟

c# - 在 Asp.Net MVC 中显示从 Controller 返回的 JSON 数组数据

c# - C# 中 sql 错误的条件语句 [offTopic]

azure - 是否可以在 iframe 上设置 cookie?