Time-saving extensions to create and setup large number of mocks using Moq framework.
👉Download releases at https://www.nuget.org/packages/Many.Mocks/
You have a class with lots of mocks...
public class UserManager : UserManager<User>
{
/// <summary>
/// Ctor. 1
/// </summary>
public UserManager(IUserStore<User> store,
IOptions<IdentityOptions> optionsAccessor)
{
}
/// <summary>
/// Ctor. 2
/// </summary>
public UserManager(IUserStore<User> store,
IOptions<IdentityOptions> optionsAccessor,
IPasswordHasher<User> passwordHasher,
IEnumerable<IUserValidator<User>> userValidators,
IEnumerable<IPasswordValidator<User>> passwordValidators,
ILookupNormalizer keyNormalizer,
IdentityErrorDescriber errors,
IServiceProvider services,
ILogger<UserManager<User>> logger)
: base(store, optionsAccessor, passwordHasher, userValidators, passwordValidators, keyNormalizer, errors, services, logger)
{
}
public void Method(IUserPasswordStore<User> store) { ... }
public void Method(IUserStore<TUser> store) { ... }
}
- You can get a bag of nedeed mocks just typing:
var mocks = typeof(UserManager).GetMocksFromConstructors(); //11 mocks: 2 from ctor. 1 and 9 from ctor. 2
- And also you can get only mocks from one specific constructor:
var mocks = typeof(UserManager).GetMocksFromConstructors(new List<Type>{ typeof(IUserStore<User>), typeof(IOptions<IdentityOptions>) }); //2 mocks from ctor. 1
- Same works for any method:
var mocks = typeof(UserManager).GetMocksFrom("method", new List<Type>{ typeof(IUserPasswordStore<User>) }); //1 mock
If a class is not proxiable and no mock can be created you can check it in the details:
var noMockCouldBeGeneratedForTheseClasses = mocks.Mocks.Where(p => !p.Generated); //Get the errors
var ex = noMockCouldBeGeneratedForTheseClasses.Error; //The thrown exception during mock generation
Just ask for them :)
var mocks = typeof(UserManager).GetMocksFromProperties();
var mocks = typeof(UserManager)
.GetMocksFromConstructors()
.Mocks.Select(p => p.Details); //Get mocks from constructor
var result = mocks.UseToTryInstantiate(out UserManager result); //Get the instance
var mocks = typeof(UserManager)
.GetMocksFromConstructors()
.Mocks.Select(p => p.Details); //Get mocks from constructor
var customMockToReplace = new Mock<IServiceProvider>();
var result = mocks.UseToTryInstantiate(new List<Mock>() {customMockToReplace}, out UserManager result); //Get the instance replacing your custom mock