Я использую Google издеваться, и хочу, чтобы дразнить в цепочку наследования, как это:Как издеваются цепочки наследования в C++ с помощью Google издеваться
class A
{
// virtual method A1();
}
class B : public A
{
// virtual method B1();
}
class C : public B
{
// virtual method C1();
}
Когда фиктивные А, мне нужно издеваться 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();
}
Есть ли хороший способ решить эту проблему?
Итак, все виртуальные методы A и B являются чисто виртуальными? – Fraser
Мошки могут наследовать друг от друга (ну, а не круговое), поэтому вам не придется переписывать все методы; посмотрите на принятый ответ: [Mock Inheritance] (http://stackoverflow.com/questions/5484906/can-a-mock-class-inherit-from-another-mock-class-in-googlemock) – dwanderson
D'oh , помогает, если я прочитаю весь путь до конца, о стороннем коде. Извини за это! – dwanderson