c++ - Google 测试框架中的可复制模拟

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

是否可以在 Google 测试框架 中制作可复制的模拟类? 我已经看到,一旦使用了 MOCK_METHOD 宏,默认的复制构造函数复制赋值运算符 就会被删除。 有没有办法解决这个问题?

最佳答案

我无法想象复制模拟对象的任何用例。当您想用模拟对象模拟真实对象时 - 您应该可以从被测代码和测试用例代码访问完全相同的对象 - 那么为什么需要复制?

无论如何 - 我看到了一种复制模拟对象的方法: 您必须在模拟对象上定义包装器 - 应由 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;
};

关于c++ - Google 测试框架中的可复制模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35367278/

相关文章:

c++ - 使用队列在 OpenCV 中保存平移和旋转矩阵

c++ - Opengl C++ : texture code textures all models with the same texture

c++ - 为什么在这两种情况下使用 C++ 模板会出现差异?

c++ - "CopyConstructible"对 C++ STL 容器元素的要求

c++ - 在具有智能指针的类上正确实现复制构造函数和等于运算符

c++ - unsigned long long int 参数的日志

mocking - 如何使用PowerMock/EasyMock从模拟方法获取输入参数

java - 使用 Mockito-core 创建最终类的模拟?

java - 创建将成为另一个模拟对象的一部分的模拟对象的最佳实践

c++ - 复制构造函数的调用