Я использую макет 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, если не имитировал все методы, унаследованные от его родителя.
Один из способов - потребовать, чтобы 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();
}
Есть ли хороший способ решить эту проблему?