#c #c 11 #gmock
#c #c 11 #googlemock
Вопрос:
У меня есть функция, которая возвращает std::unique_ptr<int[]>
, и я хотел бы проверить в модульном тестировании, что она возвращает правильные элементы. Похоже, что приведенный ниже код не работает:
std::vector<int> foo = {1, 2, 3};
std::unique_ptr<int[]> bar = my_func();
EXPECT_THAT(bar, ElementsAreArray(foo))
Я также пробовал заменить bar
на bar.get()
в assert, но я все еще получаю странные ошибки типа.
Комментарии:
1. * bar ?……….
2. Пожалуйста, уточните «не работает». Что произошло, и чего вы ожидали? Вы упомянули ошибки типа — пожалуйста, скопируйте сообщение об ошибке в свой вопрос. Эти сообщения предназначены для того, чтобы рассказать вам, что вы сделали неправильно; умение понимать их поможет вам в долгосрочной перспективе.
Ответ №1:
bar.get()
вернет необработанный (не являющийся владельцем) указатель на ту же память, на которую unique_ptr
ссылается. Что вы хотите, так это разыменовать unique_ptr
, чтобы вернуть базовый массив целых чисел.
Даже в этом случае ваш EXPECT_THAT
не добьется успеха, поскольку он попытается приравнять свои аргументы к operator==
, это будет недоступно для int[]
и vector<int>
, если вы не определите это. В качестве альтернативы вы могли бы поместить EXPECT_THAT
строку в цикл и выполнить итерацию по двум контейнерам.