5
我使用谷歌模擬,並想嘲笑繼承鏈是這樣的:如何嘲笑繼承鏈在C++與谷歌嘲笑
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類。
一種方法是要求從C和mockB都繼承mockC,但它需要C和mockB都是從B繼承的,但C-> B->繼承鏈是在第三方代碼中定義的,我不能更改。
// 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可以相互繼承(當然,不是循環的),所以你不必重寫所有的方法;看看接受的答案:[Mock Inheritance](http://stackoverflow.com/questions/5484906/can-a-mock-class-inherit-from-another-mock-class-in-googlemock) – dwanderson
D'oh ,如果我一直閱讀關於第三方代碼的結尾,這會有所幫助。對於那個很抱歉! – dwanderson