如何使用GTest测试严重依赖于MFC的方法?



我已经开始使用GTest (Google Test)为我正在工作的一个c++项目。我有一个类,严重依赖于MFC (CFile, CObject, CString等)。

我如何打破对MFC的依赖(或最小化它们),所以我不必创建虚拟MFC对象只是为了运行我的测试?我想测试我的方法没有MFC功能。

下面是我要测试的方法的一个例子:

// DumpContext class inherits from CDumpContext
void MyClass::Print(DumpContext &dc)
{
    // MyClass::Print real work goes here :
    ...
}

据我所知,MFC缺乏接口这一事实使得它很难被模拟。作为一种替代方案,您可以从依赖项中继承,并尝试充分利用它。在您的示例中,您可以使用已经存在的CMemFile,它在构造时不需要任何东西,并允许您访问结果。

在其他情况下,你必须自己发明类似的东西。

class MyClass
{
public:
    void Print(CDumpContext &dc) {
        dc.DumpAsHex(5592);
        return;
    }
};
TEST(Demo_Test,MyClass)
{
    CMemFile File;
    CDumpContext DumpContext_Stubb(&File);
    MyClass Class;
    Class.Print(DumpContext_Stubb);
    EXPECT_GT(File.GetLength() ,0); // Do some test on the result
}

最新更新