我正在使用大型的C ++代码库,并且正在为缺少组件的组件创建单元测试。
模拟这些类的功能以进行测试的正确方法是什么?当前,我正在使用虚函数,并且在我的测试模块中,我将从基类“生产”类派生一个模拟类,并根据需要重写功能。
这是一个例子:
Production.cpp
class Production {
protected:
int Servers = 0;
public:
virtual bool IsValInRegistry(const std::string& regVal);
};
bool Production::IsValInRegistry(const std::string& regVal)
{
HRESULT hr = GOOD;
hr = WinSysCallToRegistry(regVal);
if (HR)
return true;
else
return false;
}
Mock.cpp
class Mock : public Production {
public:
bool IsValInRegistry(const std::string& regVal) override final;
};
Mock::IsValInRegistry(const std::string& regVal)
{
return true;
}
这是正确的前进方向吗?我担心如果引入过多的virtual
函数,可能会遇到性能下降的情况,我想避免这种情况。如果此virutal
模型不理想,有什么好的方法?
答案 0 :(得分:0)
如果您希望这样做不会对性能造成任何影响,则可能需要尝试像这样进行编译时模拟:
Report report = ss.ReportResources.GetReport(
reportid, // long reportId
null, // IEnumerable<ReportInclusion>
null, // int pageSize
null // int page
);
foreach(var Col in report.Columns)
{
Console.WriteLine($"Title:{Col.Title} ID:{Col.Id}");
}
这将需要使用您需要的测试的必需标志重新编译,但是生产版本将保持原样。因此,花时间运行这些单元测试只是时间问题。