Here’s another feature Typemock Isolator has that no one else currently has: the ability to return fake objects from properties recursively (without the use of an auto mocking container for such a feat). this saved a lot of reperitive test code of creating stubs that return stubs that return some custom result.
For example, an object person has a manager which is also a person (which of course also has a manager etc..)
here’s how you can use this feature:
[Test,Isolated]     
public void test()      
{      
    Person person = Isolate.Fake.Instance<Person>(Members.ReturnRecursiveFakes);      
    Assert.IsNotNull(person.Manager.Manager.Manager.Manager);      
} 
This test will pass (Manager is null by default. look at the class in question below:
class Person     
   {      
       public string Name      
       {      
           get { return name; }      
       } 
       public Person Manager     
       {      
           get { return manager; }      
       } 
       private string name;     
       private Person manager;      
   }
Here is how you can return stub results from properties of the stubbed objects:
[Test,Isolated]     
public void test()      
{      
    Person person = Isolate.Fake.Instance<Person>(Members.ReturnRecursiveFakes);      
    Isolate.WhenCalled(() => person.Manager.Manager.Name)       
               .WillReturn("roy");      
    Assert.AreEqual("roy",person.Manager.Manager.Name);      
} 
Notice that:
-            By saying “ReturnRecursiveFakes” we are actually saying “I don’t care who uses this object and how from now on. It will return a fake when needed from all properties and the properties of the stubs as well. 
-      We can still set stub results on the fakes on any level 
If we wanted to only fake the Manager name and leave everything else intact we could just use a live object in the test like this:
[Test,Isolated]     
public void test()      
{      
    Person person = new Person();
    Isolate.WhenCalled(() => person.Manager.Manager.Name)     
               .WillReturn("roy");      
    Assert.AreEqual("roy",person.Manager.Manager.Name);      
}