更改单元测试的类功能的正确方法?

时间:2019-01-09 23:08:50

标签: c++ unit-testing

我正在使用大型的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模型不理想,有什么好的方法?

1 个答案:

答案 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}");
        }

这将需要使用您需要的测试的必需标志重新编译,但是生产版本将保持原样。因此,花时间运行这些单元测试只是时间问题。