Можно ли сделать фиктивный класс копируемым в Google Test Framework?
Я видел, что по умолчанию конструктор копирования а также оператор копирования удаляются, как только 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;
};
Других решений пока нет …