首页 > 解决方案 > gmock 可以模拟未定义的方法吗?

问题描述

我有一个测试对象,我想调用EXPECT_CALL一个实际对象中不需要的方法,是否可以模拟这种未定义的新方法?

struct MockObject {
    MOCK_METHOD2(onRecv, void(void* buffer, size_t len));
};

MockObject不从任何其他类继承。这是支持 gmock 的用例吗?

标签: c++googletestgmock

解决方案


据我所知,您在这里所拥有的是明确定义的行为。据我所知,MOCK_METHOD宏所做的只是连接方法原型和设置期望所需的其他元素。因此,虽然MOCK_METHOD宏系列主要用于开发从需要测试的类派生的模拟类,但您的实际使用本身对我来说看起来很理智。

虽然 google mocks 很简洁,但如果您发现有人在代码审查中抱怨这一点,您可以轻松编写自己的 mock 方法。

struct MockObject {
   void onRecv(void* buffer, size_t len) {
        buf_ = buffer;
        len_ = len;
        onRecvCallCount_++;
   }
   void * buf_;
   size_t len_;
   int onRecvCallCount_ = 0;
};

// actual test setup being
void Setup() {
    mockObject.onRecvCallCount_ = 0
}

// The rest of the assertions/expectations get wrapped inside the 
// if (mockObject.onRecvCallCount_) { } block

因此,google mock 宏通过提供简单的宏(如MOCK_METHOD. 所以不要犹豫使用它。


推荐阅读