【问题标题】:How can I test methods that depends heavily on MFC with GTest如何使用 GTest 测试严重依赖 MFC 的方法
【发布时间】:2011-12-19 12:22:07
【问题描述】:

我已经开始将 GTest(Google 测试)用于我正在处理的 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 类,则不能从项目中删除该依赖项。确保您测试您的代码而不是 MFC 的方法是编写 在您的测试中的代码,以便您测试您的代码而不是 MFC。
  • 我的类不是 MFC 的后代,而是使用 MFC 类的引用和局部变量。在给定的示例中,我必须在调用 Print 方法之前创建一个 DumpContext。要创建一个 CDumpContext(我的方法可以使用),我必须将一个 CFile 传递给 CDumpContext 构造函数。要创建一个 CFile,我需要一个通过调用 CreateFile 函数等创建的句柄……我宁愿只将一个模拟 DumpContext 传递给我的方法,而不是使用 MFC 类来创建一个“真实的”CDumpContext。现在更有意义了吗?谢谢!

标签: c++ mfc tdd googletest


【解决方案1】:

据我所知,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
}

【讨论】:

    猜你喜欢
    • 2015-03-29
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    相关资源
    最近更新 更多