我目前正在尝试使用C#进行测试,该测试依赖于UserManager和RoleManager。我嘲笑了它们,但没有帮助,另外,我得到了一个异常,该异常说明无法将模拟对象转换为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;
}
提前谢谢!
答案 0 :(得分:0)
我使用这种扩展方法,因为您会注意到它返回了一个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;
}