【问题标题】:Can a mock class inherit from another mock class in googlemock?模拟类可以从googlemock中的另一个模拟类继承吗?
【发布时间】:2011-07-25 23:43:48
【问题描述】:

一个模拟类可以从 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));
};

我收到 MockBcannot instantiate abstract class 编译器错误,但 MockA 却没有

【问题讨论】:

    标签: c++ unit-testing mocking gmock


    【解决方案1】:

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

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

    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;
    }
    

    这只是你的例子的一个小修改

    【讨论】:

    • 这个例子是假类而不是模拟类。
    【解决方案2】:

    MockB 类继承自 IB,它有两个纯抽象函数:test1test2。你需要覆盖它们。从覆盖test1MockA 继承是不够的(至少在C++ 中- 在Java 中它会起作用)。所以解决方法是添加

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

    MockB 定义。

    【讨论】:

      猜你喜欢
      • 2019-08-18
      • 1970-01-01
      • 1970-01-01
      • 2011-08-08
      • 2016-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-24
      相关资源
      最近更新 更多