I am currently trying to make a test in C# which is relied on UserManager and RoleManager. I mocked them but that did not help, additionally I got an exception which illustrates that a mock object cannot be converted to User or RoleManager.
My question is: do you have any idea how to make instances of UserManager and RoleManager without passing augments in their parameters? So that instances will be used for testing purposes?
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;
}
Thank you in advance!
I use this extension method, as you can notice it returns a Mock instance so you can set up any behavior that you need in the unit test.
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;
}