Use*_*ser 7 c++ constructor mocking default-constructor googlemock
将Visual Studio 2010 C++与googlemock一起使用.我正在尝试使用我创建的模拟,我在线上得到编译器错误:
EmployeeFake employeeStub;
Run Code Online (Sandbox Code Playgroud)
错误是:
1>c:\someclasstests.cpp(22): error C2512: 'MyNamespace::EmployeeFake' : no appropriate
default constructor available
Run Code Online (Sandbox Code Playgroud)
EmployeeFake:
class EmployeeFake: public Employee{
public:
MOCK_CONST_METHOD0(GetSalary,
double());
}
Run Code Online (Sandbox Code Playgroud)
雇员:
class Employee
{
public:
Employee(PensionPlan *pensionPlan, const char * fullName);
virtual ~Employee(void);
virtual double GetSalary() const;
}
Run Code Online (Sandbox Code Playgroud)
我认为问题是基类没有默认构造函数,但我该如何解决这个问题呢?我是否需要在基类中添加默认构造函数?或者我是否需要在我的模拟类中添加构造函数?或者是其他东西?
Mic*_*yan 10
您可以只将一个构造函数添加到委托给Employee构造函数的mock中:
class MockEmployee : public Employee {
public:
MockEmployee(PensionPlan* pension_plan, const char* full_name)
: Employee(pension_plan, full_name) {}
// ...
};
Run Code Online (Sandbox Code Playgroud)
然后构建MockEmployee,就像构建Employee一样.但是,有一些事情可以改进,我强烈推荐这个代码,这将简化这个:
所以,澄清一下,我的建议是:
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 ...
};
Run Code Online (Sandbox Code Playgroud)