我有工厂通过返回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>]’
答案 0 :(得分:0)
也许有点晚,但是这里有一个选择:
只需添加“ ByMove”其他操作即可移动参数:
.WillOnce(Return(ByMove(std::make_unique<NCursesMainWindowDecorator>(std::make_unique<NCursesWindow>()))))