我正在使用谷歌模拟,并想模拟这样的继承链:
class A
{
// virtual method A1();
}
class B : public A
{
// virtual method B1();
}
class C : public B
{
// virtual method C1();
}
模拟 A 时,我需要模拟 A1(); 模拟 B 时,我必须同时模拟 A1() 和 B1();当模拟 C 时,我必须模拟 C1()、B1() 和 A1()。
//Mock Definition
class MockA : public A
{
// mockA1()
}
class MockB : public B
{
// mockA1()
// mockB1()
}
class MockC : public C
{
// mockA1()
// mockB1()
// mockC1()
}
但是,对于 C 类,我只关心新的扩展函数 C1()。我不想模拟它的所有父方法,尤其是当定义的方法太多时。但是,如果我没有模拟从其父类继承的所有方法,我将无法实例化 mockC 类。
一种方法是要求mockC从C和mockB继承,但是它要求C和mockB都从B纯继承。但是C->B->A继承链是在第三方代码中定义的,我无法更改。
// I cannot change this to virtual inheritance
class C : public virtual B
{
//method C1();
}
class mockB : public virtual B
{
// mthod B1()
}
class mockC: public C, public mockB
{
// mock method C1();
}
有什么好的方法可以解决这个问题吗?