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

发布于 2024-12-13 11:18:16 字数 358 浏览 0 评论 0原文

我已经开始将 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 :
    ...

}

I've started to use GTest (Google Test) for a C++ project I'm working on. I have one class that depends heavily on MFC (CFile, CObject, CString, etc.).

How can I break the dependencies on MFC (or minimize them) so I don't have to create dummy MFC objects just to run my tests? I want to test what my methods do not MFC functionnalities.

Here is an example of the kind of method I have to test :

// DumpContext class inherits from CDumpContext
void MyClass::Print(DumpContext &dc)
{

    // MyClass::Print real work goes here :
    ...

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

不再见 2024-12-20 11:18:16

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

As far as I can understand, the fact that MFC lacks interfaces makes it difficult to mock.
As an alternative you can inherit from a dependency and try to make the best out of it.
In your example you can use the already existing CMemFile which doesn't require anything when constructing and lets you access the result.

In other cases you have to invent something similar yourself.

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
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文