For some time I am trying to make a mocking library for C# that mocks objects with just 1 line of code. I am using abstract factory pattern to know what is the object's type so that I can work with concrete factories. I have the following Abstract factory class which I am not very happy with. public class MockContext<T> { public T CreateMockObject() { IFactory<T> factory = null; if (typeof(T).IsPrimitive || typeof(T) == typeof(string) || typeof(T) == typeof(decimal)) { factory = new PrimitiveFactory<T>(); } else if (typeof(T).IsArray) { factory = new ArrayFactory<T>(); } else if (typeof(IEnumerable).IsAssignableFrom(typeof(T))) { factory = new CollectionFactory<T>(); } else if (typeof(T).IsClass && typeof(T) != typeof(string)) { factory = new ClassFactory<T>(); } return factory.Create(); } } } Which gets called by the following class public class Mocker { public T MockObject<T>() { MockContext<T> context = new MockContext<T>(); T mockObject = context.CreateMockObject(); return mockObject; } } This abstract factory instantiates other factories depending on of the object. Here is my class factory: public class ClassFactory<T> : IFactory<T> { public T Create() { T mockObject = (T)Activator.CreateInstance(typeof(T)); IEnumerable<PropertyInfo> properties = typeof(T).GetProperties().Where(p => p.CanWrite); GenericMethodInvokerUtil method = new GenericMethodInvokerUtil(); foreach (PropertyInfo property in properties) { if (property.PropertyType == typeof(T)) throw new Exception("Circular properties are not supported!"); method.InvokeMockObject<T>(property.PropertyType, property, mockObject); } return mockObject; } } I am using the above code as follows: static void Main(string[] args) { Mocker mocker = new Mocker(); var mock = mocker.MockObject<Test>(); } With Test being some class with properties. Can anyone suggest how to write this better? Maybe there is a pattern that I am not familiar with. Any help would be appreciated. Thanks in advance.