模拟类可以从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
答案 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
,其中包含两个纯抽象函数:test1
和test2
。你需要覆盖它们。继承MockA
覆盖test1
是不够的(至少在C ++中 - 在Java中它可以工作)。所以修复是添加
virtual int test1(int a)
{
return MockA::test1(a);
}
到MockB
定义。