模拟类可以从googlemock中的另一个模拟类继承吗?

时间:2011-03-30 10:09:51

标签: c++ unit-testing mocking gmock

模拟类可以从googlemock中的另一个模拟类继承吗?如果是,那么请帮助我理解为什么这不起作用。

class IA
{
public:
   virtual int test1(int a) = 0;
};

class IB : public IA
{
public:
   virtual float test2(float b) = 0;
};

class MockA : public IA
{
public:
   MOCK_METHOD1(test1, int (int a));
};

class MockB : public MockA, public IB
{
public:
   MOCK_METHOD1(test2, float (float b));
};

我为cannot instantiate abstract class收到MockB编译错误,但MockA

错误

2 个答案:

答案 0 :(得分:5)

如果您打算使用多重继承,则应该使用虚拟继承。

下一个示例编译并链接正常:

class IA
{
    public:
        virtual int test1(int a) = 0;
};

class IB : virtual public IA
{
    public:
        virtual float test2(float b) = 0;
};

class MockA :virtual public IA
{
    public:
        int test1(int a)
        {
            return a+1;
        }
};

class MockB : public MockA, public IB
{
    public:
        float test2(float b)
        {
            return b+0.1;
        }
};

int main()
{
    MockB b;
    (void)b;
}

这只是对您的示例的一个小修改

答案 1 :(得分:2)

班级MockB继承自IB,其中包含两个纯抽象函数:test1test2。你需要覆盖它们。继承MockA覆盖test1是不够的(至少在C ++中 - 在Java中它可以工作)。所以修复是添加

virtual int test1(int a)
{
    return MockA::test1(a);
}

MockB定义。