Ich bin mit Mock google, und will eine Vererbungskette so verhöhnen:Wie Vererbungskette in C++ mit Google modell
class A
{
// virtual method A1();
}
class B : public A
{
// virtual method B1();
}
class C : public B
{
// virtual method C1();
}
Wenn Mock A, ich brauche A1 zu verspotten(); Wenn Mock B, muss ich beide A1() und B1() verspotten; Wenn ich C vorstelle, muss ich C1(), B1() und A1() vortäuschen.
//Mock Definition
class MockA : public A
{
// mockA1()
}
class MockB : public B
{
// mockA1()
// mockB1()
}
class MockC : public C
{
// mockA1()
// mockB1()
// mockC1()
}
jedoch für die Klasse C, I kümmert sich nur die neue erweiterte Funktion C1(). Ich wollte nicht all seine Elternmethode verspotten, besonders wenn zu viele Methoden definiert sind. Aber ich kann die MockC-Klasse nicht instanziieren, wenn ich nicht alle Methoden verspottet habe, die von ihren Eltern geerbt wurden. Eine Möglichkeit besteht darin, zu verlangen, dass mokeC sowohl von C als auch von mockB erbt. Allerdings erfordert es sowohl C als auch mockB, das von B. vererbt wird, aber die C-> B-> A-Vererbungskette ist im Code von Drittanbietern definiert, was nicht möglich ist Veränderung.
// 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();
}
Gibt es eine gute Möglichkeit, dieses Problem zu lösen?
Also sind alle virtuellen Methoden von A und B rein virtuell? – Fraser
Mocks können voneinander (gut, nicht zirkulär) erben, so dass Sie nicht alle Methoden neu schreiben müssten; schau dir die akzeptierte Antwort an: [Mock Inheritance] (http://stackoverflow.com/questions/5484906/can-a-mock-class-inherit-from-another-mock-class-in-googlemock) – dwanderson
D'oh , hilft, wenn ich den ganzen Weg bis zum Ende lese, über den Code von Drittanbietern. Das tut mir leid! – dwanderson