gmock перемещение мок объекта
Есть NetRequester, который ходит в сеть. Хочется мокнуть сетевые запросы в классе Consumer. Gmock в доке пишет, что для этого можно использовать шаблоны. Но дальнейшие примеры ограничено прямым вызовом методов мокнутого объекта.
Как я могу проверить вызовы, если конструктор Consumer перемещает объект Requester? Код ниже не компилируется с ошибкой отсутствия перемещающего конструктора.
Один из красивых выходов - использовать unique_ptr для requester_ у класса Consumer, но не хочется изменять ход только для тестов.
class NetRequester
{
public:
void DoRequest() {}
};
template<typename Requester>
class Consumer
{
public:
Consumer(Requester&& requester)
: requester_(std::move(requester))
{
}
void DoJob()
{
requester_.DoRequest();
}
Requester requester_;
};
class MockRequester
{
public:
MOCK_METHOD(void, DoRequest, ());
};
TEST(Test, CheckMoveConstructor)
{
MockRequester mock_requester;
EXPECT_CALL(mock_requester, DoRequest()).Times(1);
Consumer consumer(std::move(mock_requester));
consumer.DoJob();
}
Ошибка компиляции:
error: use of deleted function ‘MockRequester::MockRequester(cosmo::test::MockRequester&&)’
: requester_(std::move(requester))
note: ‘MockRequester::MockRequester(MockRequester&&)’ is implicitly deleted because the default definition would be ill-formed: