2014-08-28 5 views
3

У меня есть класс с несколькими методами, которые зависят друг от друга. Допустим, foo(), bar() и baz().установить EXPECT_CALL для перенаправления вызова на исходный метод

Когда я тестирую бар() Мне нужно высмеять поведение foo(), когда я тестирую baz() Мне нужно высмеять поведение bar().

Если я макет бара для 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));