3
我有一個類,有幾個方法相互依賴。讓我們說foo(),bar()和baz()。當我測試bar()時,我需要模擬foo()的行爲,當我測試baz()時,我需要模擬bar()的行爲。設置EXPECT_CALL將呼叫重定向到原始方法
如果我嘲笑baz,我不能使用相同的模擬類來測試嘲笑foo()的酒吧。
我的問題是我可以設置EXPECT_CALL來實際調用原始行爲和方式。這將消除創建幾個Mock類的需要。
我有一個類,有幾個方法相互依賴。讓我們說foo(),bar()和baz()。當我測試bar()時,我需要模擬foo()的行爲,當我測試baz()時,我需要模擬bar()的行爲。設置EXPECT_CALL將呼叫重定向到原始方法
如果我嘲笑baz,我不能使用相同的模擬類來測試嘲笑foo()的酒吧。
我的問題是我可以設置EXPECT_CALL來實際調用原始行爲和方式。這將消除創建幾個Mock類的需要。
答案可以在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));