Ожидать вызова в GMock, когда Factory возвращает уникальный__ - PullRequest
0 голосов
/ 09 июня 2018

У меня есть фабрика, которая создает некоторые окна, возвращая 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, не копируя его, так же, как я делаю это в моем методе fist?
Мой 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 голосов
/ 24 декабря 2018

Может быть немного поздно, но здесь есть опция:

Просто добавьте дополнительное действие «ByMove» для перемещения аргумента:

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