将 Visual Studio 2010 C++ 与 googlemock 结合使用。我正在尝试使用我创建的模拟,但出现编译器错误:
EmployeeFake employeeStub;
错误是:
1>c:\someclasstests.cpp(22): error C2512: 'MyNamespace::EmployeeFake' : no appropriate
default constructor available
员工假:
class EmployeeFake: public Employee{
public:
MOCK_CONST_METHOD0(GetSalary,
double());
}
员工:
class Employee
{
public:
Employee(PensionPlan *pensionPlan, const char * fullName);
virtual ~Employee(void);
virtual double GetSalary() const;
}
我发现问题是基类没有默认构造函数,但我应该如何解决这个问题?我需要向我的基类添加默认构造函数吗?或者我需要向我的模拟类添加一个构造函数吗?或者是其他东西?
您只需将一个构造函数添加到您的模拟中,该构造函数委托给 Employee 构造函数:
class MockEmployee : public Employee {
public:
MockEmployee(PensionPlan* pension_plan, const char* full_name)
: Employee(pension_plan, full_name) {}
// ...
};
然后像构造 Employee 一样构造 MockEmployee。但是,我强烈建议您对此代码进行一些改进,这将简化此过程:
- 使 Employee 成为纯虚拟的(使用受保护的默认构造函数)。
- 将当前 Employee 实现重命名为描述员工类型的名称(例如 FullTimeEmployee 或 EmployeeWithPensionPlan),并使其继承自纯虚拟类型。
- 使用“virtual ~Employee()”而不是“virtual ~Employee(void)”(在参数中显式使用 void 是 C 的保留,据我所知,在大多数 C++ 社区中已经不再流行)。
- 使用“const string&”而不是“const char*”作为名称。
因此,为了澄清,我的建议是:
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 ...
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)