Я пытаюсь добавить несколько тестов в свой проект, используя 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, поэтому я не добавляю реализацию этого класса.