私はGoogleモックを使用しており、次のような継承チェーンをモックしたいと考えています:
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 クラスをインスタンス化できません。
1 つの方法は、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();
}
この問題を解決する良い方法はありますか?