How-To: Returning a Class By Value with Isolator++

Isolator++ has two ways to return stuff for a method. It has the ReturnVal to return values, and ReturnPtr to return pointers to objects. What about returning a class by value?

Though there’s no API (currently), it’s very easy to do. You use the almighty 10lbs hammer known as DoInstead.

Let’s say you have this method:

bool Person::IsLivingInLA()


         Address currentAddress = Address::GetAddress();

         if (strcmp (currentAddress.GetCity(),“Los Angeles”)==0)


                 return true;



                 return false;


The GetAddress method returns an Address object by value. How can we return our own object?

Let’s create a helper class with a static method with the same signature of GetAddress:

class TestUtil



static Address ReturnAddress()


                 Address laAddress;
                 laAddress.SetCity( "Los Angeles"); 
                  return laAddress;

This class is part of the test project, not the production code. Now, in the test, we’ll fake the static method GetAddress, by calling the ReturnAddress method instead.

TEST_F(PersonTests, IsLivingInLA_AddressIsLA_ReturnsTrue)
         Person person;
         TestUtil testUtil;

         // Fake the static method by calling the other method instead

                 DoStaticOrGlobalInstead(TestUtil::ReturnAddress, NULL);


Using the DoStaticOrGlobalInstead, I pass the static method replacement, and a NULL value (which can be a context if needed, but not needed in this case).

Remember that another option, for calling DoInstead on a member function, you’ll use the call the DoMemberFunctionInstead method instead. That’s because it needs the same signature.