Google Test Framework中的可复制模拟

时间:2016-02-12 16:16:30

标签: c++ mocking copy-constructor googletest copy-assignment

是否可以在 Google Test Framework 中创建可模仿的类? 我已经看到,一旦使用了MOCK_METHOD宏,就会删除默认的复制构造函数复制赋值运算符。 有办法解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

我无法想象复制模拟对象的任何用例。当你想用模拟对象模仿真实对象时 - 你可以从测试代码和测试用例代码访问同一个对象 - 那么为什么需要复制呢?

无论如何 - 我看到一种复制模拟对象的方法: 你必须在模拟对象上定义包装器 - 它应由std::shared_ptr保存。

一个例子:

class XxxMock : public XxxInterface
{
public:
   MOCK_METHOD0(foo, void());
};

#include <memory>
class XxxSharedMock : public XxxInteface
{
public:
   XxxSharedMock(std::shared_ptr<XxxMock> xxxMock = std::make_shared<XxxMock>())
      : xxxMock(xxxMock) 
   {}
   void foo() override
   {
       xxxMock->foo();
   }
   // having: XxxSharedMock xxxMock; 
   // do:     EXPECT_CALL(xxxMock.mock(), foo());
   XxxMock& mock() { return *xxxMock; }
   XxxMock const& mock() const { return *xxxMock; }

privated:
   std::shared_ptr<XxxMock> xxxMock;
};