2015-11-10 72 views
3

我比較GoogleMock與FakeIt編寫單元測試。我喜歡FakeIt over GoogleMock,因爲我來自Java背景,並且FakeIt堅持接近Mockito/JMock語法,這使得使用該庫更容易編寫&維護。CPP FakeIt庫多繼承

但FakeIt GIT主頁(https://github.com/eranpeer/FakeIt)表示它不支持MultipleInheritance,應用程序im測試具有多重繼承的代碼。我不必支持鑽石繼承,所以我想知道它是否僅支持多重繼承的那方面,或者是否還有其他不支持的方面?

回答

1

遺憾的是,似乎任何類型的多重繼承的是不支持,即使它只是一個「接口」,它統一了其他幾個「接口」,如:

struct IA { virtual void a() = 0; }; 
struct IB { virtual void b() = 0; }; 
struct IC : public IA, public IB {}; 
fakeit::Mock<IC> mock; // error :(

(該檢查是用做std::is_simple_inheritance_layout<T>

我沒有,但是,找到一點的辦法解決這個問題,至少對於簡單的場景:

class MockC : public IC { 
public: 
    MockC(IA& a, IB& b) : m_a(a), m_b(b) {} 
    void a() override { return m_a.a(); }; 
    void b() override { return m_b.b(); }; 
private: 
    IA& m_a; 
    IB& m_b; 
}; 

fakeit::Mock<IA> mockA; 
fakeit::Mock<IB> mockB; 
MockC mockC(mockA.get(), mockB.get()); 
// Use mockA and mockB to set up the mock behavior the way you want it. 
// Just make sure not to use mockC after they go out of scope!