2014-08-28 30 views
3

我有一個類,有幾個方法相互依賴。讓我們說foo(),bar()和baz()。當我測試bar()時,我需要模擬foo()的行爲,當我測試baz()時,我需要模擬bar()的行爲。設置EXPECT_CALL將呼叫重定向到原始方法

如果我嘲笑baz,我不能使用相同的模擬類來測試嘲笑foo()的酒吧。

我的問題是我可以設置EXPECT_CALL來實際調用原始行爲和方式。這將消除創建幾個Mock類的需要。

回答

4

答案可以在googlemock CookBook

總之可以發現,你需要寫

class MockFoo : public Foo { 
public: 
    // Mocking a pure method. 
    MOCK_METHOD1(Pure, void(int n)); 
    // Mocking a concrete method. Foo::Concrete() is shadowed. 
    MOCK_METHOD1(Concrete, int(const char* str)); 

    // Use this to call Concrete() defined in Foo. 
    int FooConcrete(const char* str) { return Foo::Concrete(str); } 
}; 

ON_CALL(foo, Concrete(_)) 
    .WillByDefault(Invoke(&foo, &MockFoo::FooConcrete));