C# 为RoleManager和UserManager创建用于单元测试的实例?

C# 为RoleManager和UserManager创建用于单元测试的实例?,c#,authentication,asp.net-identity,owin,C#,Authentication,Asp.net Identity,Owin,我目前正在尝试使用C#进行测试,它依赖于UserManager和RoleManager。我模拟了它们,但这并没有帮助,此外,我还得到了一个异常,说明模拟对象无法转换为用户或角色管理器 我的问题是:您知道如何创建UserManager和RoleManager实例而不在其参数中传递增广吗?那么实例将用于测试目的 public Object MockedUserManager() { var mockUserManager = new Mock<UserManager<User&g

我目前正在尝试使用C#进行测试,它依赖于UserManager和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;
}
public Object MockedUserManager()
{
var mockUserManager=new Mock(
新建Mock().Object,
新建Mock().Object,
新建Mock().Object,
新的IUserValidator[0],
新的IPasswordValidator[0],
新建Mock().Object,
新建Mock().Object,
新建Mock().Object,
新建Mock().Object);
返回mockUserManager.Object;
}

提前谢谢你

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

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;
    }
publicstaticmock GetUserManagerMock()
其中TUser:BaseCfUser
{
var store=newmock();
var userManagerMock=new Mock(store.Object,null,null,null,null,null,null,null);
userManagerMock.Object.UserValidators.Add(newuservalidator());
userManagerMock.Object.PasswordValidators.Add(newpasswordvalidator());
返回userManagerMock;
}

我使用了同样的方法,效果很好,谢谢你的回答!