Как проверить элементы в std ::unique_ptr?

#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 строку в цикл и выполнить итерацию по двум контейнерам.