为 RoleManager 和 UserManager 创建实例以进行单元测试?
Creating instances for RoleManager and UserManager for unit testing?
我目前正在尝试使用依赖于 UserManager 和 RoleManager 的 C# 进行测试。我嘲笑了他们,但这没有帮助,另外我得到一个异常,说明模拟对象不能转换为 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;
}
提前致谢!
我使用了这个扩展方法,你可以注意到它returns一个 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;
}
我目前正在尝试使用依赖于 UserManager 和 RoleManager 的 C# 进行测试。我嘲笑了他们,但这没有帮助,另外我得到一个异常,说明模拟对象不能转换为 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;
}
提前致谢!
我使用了这个扩展方法,你可以注意到它returns一个 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;
}