期待在GMock中调用Factory返回unique_ptr

时间:2018-06-09 16:10:58

标签: c++ c++11 factory-pattern gmock

我有工厂通过返回unique_ptr创建一些窗口:

std::unique_ptr<WindowsInterface> NCursesWindowsFactory::createMainWindow()
{
    return std::make_unique<NCursesMainWindowDecorator>(std::make_unique<NCursesWindow>());
}

在Mocked工厂类这个方法:

MOCK_METHOD0(createMainWindow, std::unique_ptr<WindowsInterface>());

如何编写EXPECT_CALL,将某些对象作为unique_ptr返回而不复制它,就像我用我的第一种方法一样?
我在工厂模拟上的EXPECT_CALL返回如下:

.WillOnce(Return(std::make_unique<NCursesMainWindowDecorator>(std::make_unique<NCursesWindow>())))

我想移动这个unique_ptr但是gmock试图复制它:

./lib/googletest/googlemock/include/gmock/gmock-actions.h:579:59: error: use of deleted function ‘std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = miniReader::windowsManager::WindowsInterface; _Dp = std::default_delete<miniReader::windowsManager::WindowsInterface>]’

1 个答案:

答案 0 :(得分:0)

也许有点晚,但是这里有一个选择:

只需添加“ ByMove”其他操作即可移动参数:

.WillOnce(Return(ByMove(std::make_unique<NCursesMainWindowDecorator>(std::make_unique<NCursesWindow>()))))