Using Visual Studio 2010 C++ with googlemock. I'm trying to use a mock I created and I'm getting the compiler error on the line:
EmployeeFake employeeStub;
The error is:
1>c:\someclasstests.cpp(22): error C2512: 'MyNamespace::EmployeeFake' : no appropriate
default constructor available
EmployeeFake:
class EmployeeFake: public Employee{
public:
MOCK_CONST_METHOD0(GetSalary,
double());
}
Employee:
class Employee
{
public:
Employee(PensionPlan *pensionPlan, const char * fullName);
virtual ~Employee(void);
virtual double GetSalary() const;
}
I gather that the problem is that the base class doesn't have a default constructor but how should I fix this? Do I need to add a default constructor to my base class? Or do I need to add a constructor to my mock class? Or something else?
You can just add a constructor to your mock that delegates to the Employee constructor:
class MockEmployee : public Employee {
public:
MockEmployee(PensionPlan* pension_plan, const char* full_name)
: Employee(pension_plan, full_name) {}
// ...
};
Then construct MockEmployee like you would construct Employee. However, there are a couple things that can be improved about this code that I would highly recommend and that would simplify this:
So, to clarify, my recommendation would be:
class Employee {
public:
virtual ~Employee() {}
virtual double GetSalary() const = 0;
protected:
Employee() {}
};
class FullTimeEmployee : public Employee {
// your concrete implementation goes here
};
class MockEmployee : public Employee {
public:
MockEmployee() {}
virtual ~MockEmployee() {}
// ... your mock method goes here ...
};