5

私は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();
}

この問題を解決する良い方法はありますか?

4

1 に答える 1