gmock可以模拟未定义的方法吗?

时间:2019-04-23 03:38:55

标签: c++ googletest gmock

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

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

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

1 个答案:

答案 0 :(得分:2)

据我所知,这里的行为是明确定义的。据我所知,MOCK_METHOD宏所做的全部工作就是连接方法原型和设置期望值所需的其他元素。因此,尽管MOCK_METHOD宏系列主要在开发从需要测试的类派生的模拟类中使用时,您的实际使用情况对我来说还是理智的。

虽然google模仿很简洁,但是如果您在代码审查中发现有人对此抱怨,则可以轻而易举地编写自己的模仿方法。

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_METHOD之类的简单宏来节省设置期望值所需的所有这些额外的连线。所以不要犹豫,使用它。