public TClassUnderTest Build() { var constructorParams = new List <object>(); var constructors = (typeof(TClassUnderTest)).GetConstructors(); if (constructors.Length > 1) { throw new InvalidOperationException("Cannot Test Types with multiple constructors - Code Smell"); } var constructor = constructors[0]; var parameters = constructor.GetParameters(); foreach (var parameter in parameters) { var parametType = parameter.ParameterType; if (!parametType.GetTypeInfo().IsAbstract&& !parametType.GetTypeInfo().IsInterface) { throw new InvalidOperationException("Use more appropriate types (interface or abstract) for your dependencies"); } constructorParams.Add(MockRegistry.Get(parameter.ParameterType)); } var instance = constructor.Invoke(constructorParams.ToArray()); return((TClassUnderTest)instance); }
public Mock <TMockType> Mock <TMockType>() where TMockType : class { return(MockRegistry.Get <TMockType>()); }