Google 测试框架中的可复制模拟
Copiable mocks in Google Test Framework
是否可以在 Google 测试框架 中制作可复制的模拟 class?
我已经看到一旦使用 MOCK_METHOD
宏,默认的 copy constructor 和 copy assignment operator 就会被删除。
有没有办法解决这个问题?
我无法想象复制模拟对象的任何用例。当你想用模拟对象模拟真实对象时——你应该可以从被测代码和测试用例代码中访问完全相同的对象——那么为什么需要复制?
无论如何 - 我看到了一种复制模拟对象的方法:
您必须在模拟对象上定义包装器 - 应由 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;
};
是否可以在 Google 测试框架 中制作可复制的模拟 class?
我已经看到一旦使用 MOCK_METHOD
宏,默认的 copy constructor 和 copy assignment operator 就会被删除。
有没有办法解决这个问题?
我无法想象复制模拟对象的任何用例。当你想用模拟对象模拟真实对象时——你应该可以从被测代码和测试用例代码中访问完全相同的对象——那么为什么需要复制?
无论如何 - 我看到了一种复制模拟对象的方法:
您必须在模拟对象上定义包装器 - 应由 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;
};