使用googlemock模拟正在测试的函数的内部调用

时间:2012-11-07 16:26:47

标签: c++ unit-testing googlemock

我是Google Mock的新手,基于我对文档和在线资源的理解,我找不到解决问题的方法:

我有以下课程:

class A
{
    public:
        A() { }
        int fun1()
        {
            //Some code
            B b;
            x = b.fun2();
            //Some other code
        }
};
class B
{
    public:
        B() { }
        int fun2()
        {
            //Some code
            y = C::fun3();
            //Some code
        }
};
class C
{
    public:
        static int fun3()
        {
            //Read a file and provide success if a certain pattern is found
        }
};

现在我正在尝试为A :: fun1()编写Google测试。但是由于代码的结构(所有调用都是通过对象而我没有使用我可以初始化模拟等的基类,所以我无法成功地模拟它。

有人可以帮助我了解Google Mock目前的形式是否嘲笑它?请注意,我不允许更改原始源代码。

1 个答案:

答案 0 :(得分:2)

只要可以使用静态接口(即模板参数)配置被测试类,就可以执行此操作。有关详细信息,请参阅此处:Mocking Nonvirtual Methods

另一种选择可能是在您测试的类中引入包装器接口,可以像往常一样进行模拟:Alternative to Mocking Concrete Classes

如果您无法更改任何代码,那么恕我直言。

<强>更新: 在class B内实例化A::fun1()很长时间,无论如何都很难模仿B。它应该作为参数传递,因此您有机会控制测试方法中的实例化。

可能是一个可行的解决方案,您可能会欺骗构建环境进行测试,并提供class B的声明和定义,提供模拟。