public static object Create(this MocksRepository repository, Type type, object[] constructorArgs, Behavior?behavior, Type[] additionalMockedInterfaces, bool?mockConstructorCall, IEnumerable <CustomAttributeBuilder> additionalProxyTypeAttributes = null, List <IBehavior> supplementaryBehaviors = null, List <IBehavior> fallbackBehaviors = null, List <object> mixins = null, Expression <Predicate <MethodInfo> > interceptorFilter = null) { if (behavior == null) { behavior = DefaultBehavior; } if (supplementaryBehaviors == null) { supplementaryBehaviors = new List <IBehavior>(); } if (fallbackBehaviors == null) { fallbackBehaviors = new List <IBehavior>(); } if (mixins == null) { mixins = new List <object>(); } var settings = DissectBehavior(behavior.Value, mixins, supplementaryBehaviors, fallbackBehaviors, constructorArgs, mockConstructorCall); settings.AdditionalMockedInterfaces = additionalMockedInterfaces; settings.AdditionalProxyTypeAttributes = additionalProxyTypeAttributes; settings.InterceptorFilter = interceptorFilter; return(repository.Create(type, settings)); }
public override object CreateMock(Type mockType, MocksRepository repository) { MockCreationSettings settings = MockCreationSettings.GetSettings(this.arguments, this.behavior, this.implementedInterfaces.ToArray(), this.mockConstructor, this.additionalProxyTypeAttributes, null, null, null, this.interceptorFilter); return(repository.Create(mockType, settings)); }
public static object Create(Type resultCollectionType, MocksRepository repo, IMockReplicator replicator, IEnumerable collection) { if (resultCollectionType == typeof(string)) return null; Type sourceType = collection.GetType(); if (resultCollectionType.IsAssignableFrom(sourceType)) return collection; var enumerableType = resultCollectionType.GetImplementationOfGenericInterface(typeof(IEnumerable<>)) ?? typeof(IEnumerable); if (!enumerableType.IsAssignableFrom(resultCollectionType)) throw new MockException("Return value is not an enumerable type."); var elementType = enumerableType.IsGenericType ? enumerableType.GetGenericArguments()[0] : typeof(object); var ilistType = typeof(IList<>).MakeGenericType(elementType); var iqueryableType = typeof(IQueryable<>).MakeGenericType(elementType); IEnumerable list; if (typeof(ICollection).IsAssignableFrom(sourceType)) { list = collection; } else { var listType = typeof(List<>).MakeGenericType(elementType); var castMethod = typeof(Enumerable).GetMethod("Cast").MakeGenericMethod(elementType); var castCollection = castMethod.Invoke(null, new[] { collection }); list = (IEnumerable)MockingUtil.CreateInstance(listType, castCollection); } var listBehavior = new DelegatedImplementationBehavior(list, new[] { ilistType, typeof(IList), }); var queryable = list.AsQueryable(); var queryableType = queryable.GetType(); var queryableBehavior = new DelegatedImplementationBehavior(queryable, new[] { queryableType.GetImplementationOfGenericInterface(typeof(IQueryable<>)) }); if (replicator != null) { var mock = replicator.CreateSimilarMock(repo, resultCollectionType, null, true, null); var mockMixin = MocksRepository.GetMockMixin(mock, null); mockMixin.FallbackBehaviors.Insert(0, queryableBehavior); mockMixin.FallbackBehaviors.Insert(0, listBehavior); return mock; } else { return repo.Create(resultCollectionType, null, Behavior.Loose, MockingUtil.EmptyTypes, null, null, null, new List<IBehavior> { listBehavior, queryableBehavior }); } }
public object CreateSimilarMock(MocksRepository repository, Type mockType, object[] constructorArgs, bool mockConstructorCall, Type[] additionalMockedInterfaces) { return repository.Create(mockType, constructorArgs, this.Behavior, additionalMockedInterfaces, mockConstructorCall); }
public object CreateSimilarMock(MocksRepository repository, Type mockType, object[] constructorArgs, bool mockConstructorCall, Type[] additionalMockedInterfaces) { return(repository.Create(mockType, constructorArgs, this.Behavior, additionalMockedInterfaces, mockConstructorCall)); }
public object CreateSimilarMock(MocksRepository repository, Type mockType, object[] constructorArgs, bool mockConstructorCall, Type[] additionalMockedInterfaces) { MockCreationSettings settings = MockCreationSettings.GetSettings(constructorArgs, this.Behavior, additionalMockedInterfaces, mockConstructorCall); return(repository.Create(mockType, settings)); }
public static object Create(Type resultCollectionType, MocksRepository repo, IMockReplicator replicator, IEnumerable collection) { if (resultCollectionType == typeof(string)) { return(null); } Type sourceType = collection.GetType(); if (resultCollectionType.IsAssignableFrom(sourceType)) { return(collection); } var enumerableType = resultCollectionType.GetImplementationOfGenericInterface(typeof(IEnumerable <>)) ?? typeof(IEnumerable); if (!enumerableType.IsAssignableFrom(resultCollectionType)) { throw new MockException("Return value is not an enumerable type."); } var elementType = enumerableType.IsGenericType ? enumerableType.GetGenericArguments()[0] : typeof(object); var ilistType = typeof(IList <>).MakeGenericType(elementType); var iqueryableType = typeof(IQueryable <>).MakeGenericType(elementType); IEnumerable list; if (typeof(ICollection).IsAssignableFrom(sourceType)) { list = collection; } else { var listType = typeof(List <>).MakeGenericType(elementType); var castMethod = typeof(Enumerable).GetMethod("Cast").MakeGenericMethod(elementType); var castCollection = castMethod.Invoke(null, new[] { collection }); list = (IEnumerable)MockingUtil.CreateInstance(listType, castCollection); } var listBehavior = new DelegatedImplementationBehavior(list, new[] { ilistType, typeof(IList), }); var queryable = list.AsQueryable(); var queryableType = queryable.GetType(); var queryableBehavior = new DelegatedImplementationBehavior(queryable, new[] { queryableType.GetImplementationOfGenericInterface(typeof(IQueryable <>)) }); if (replicator != null) { var mock = replicator.CreateSimilarMock(repo, resultCollectionType, null, true, null); var mockMixin = MocksRepository.GetMockMixin(mock, null); mockMixin.FallbackBehaviors.Insert(0, queryableBehavior); mockMixin.FallbackBehaviors.Insert(0, listBehavior); return(mock); } else { return(repo.Create(resultCollectionType, null, Behavior.Loose, MockingUtil.EmptyTypes, null, null, null, new List <IBehavior> { listBehavior, queryableBehavior })); } }