Как передать unique_ptr в макет объекта в качестве параметра функции - PullRequest
0 голосов
/ 19 октября 2019

Я пытаюсь добавить несколько тестов в свой проект, используя gtest / gmock . У меня проблема с тестированием функции, которая переводит const unique_ptr в объект другого класса.

Класс View имеет несколько функций, включая get_description_from_user() и get_category_from_user(). Эти функции получают данные, введенные пользователем в окне терминала. В классе PlanService есть функция create_plan(), которая вызывает указанные выше функции из класса View. Я создал класс MockView, но не знаю, как передать указатель на объект этого класса в качестве параметра функции create_plan().

Вот мой код:

class MockView :
        public View {
public:
    MOCK_METHOD(string, get_description_from_user, ( ));
    MOCK_METHOD(string, get_category_from_user, ( ));
};

TEST(create_plan, set_category_and_description)
{
    const unique_ptr<MockView> view(new MockView());
    EXPECT_CALL(*view, get_description_from_user()).WillOnce(Return("desc"));
    EXPECT_CALL(*view, get_category_from_user()).WillOnce(Return("cat"));

    PlanService plan_service;
    plan_service.create_plan(move(view)); //The problem is here.
    EXPECT_EQ(plan_service.get_category(), "cat");
    EXPECT_EQ(plan_service.get_description(), "desc");
}

Я получаю сообщение об ошибке:

no matching function for call to  ‘PlanService::create_plan(std::remove_reference<const  std::unique_ptr<MockView>&>::type)’ plan_service.create_plan(move(view));

Большое спасибо заранее за любую помощь.

РЕДАКТИРОВАТЬ: Класс PlanService

#include <memory>
#include <vector>

class Plan;
class View;

class PlanService {

public:
    PlanService() = default;
    virtual ~PlanService() = default;
    virtual void create_plan(const std::unique_ptr<View>& view);
    //... some more functions
    const std::string& get_description() const;
    const std::string& get_category() const;
private:
    std::string description;
    std::string category;
};

Определение функции create_plan():

void PlanService::create_plan(const unique_ptr<View>& view)
{
    description = view->get_description_from_user();
    category = view->get_category_from_user();
}

Класс View намного сложнее, потому что он использует библиотеку ncurses, поэтому я не добавляю реализацию этого класса.

...