Как проверить элементы в std :: unique_ptr? - PullRequest
0 голосов
/ 09 марта 2019

У меня есть функция, которая возвращает 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 Ответ

1 голос
/ 09 марта 2019

bar.get() вернет необработанный (не принадлежащий) указатель на ту же память, на которую ссылается unique_ptr. То, что вы хотите, это разыменовать unique_ptr, чтобы вернуть базовый целочисленный массив.

Даже в этом случае ваш EXPECT_THAT не будет успешным, поскольку он попытается приравнять свои аргументы к operator==, это не будет доступно для int[] и vector<int>, если вы не определите его. Кроме того, вы можете поместить строку EXPECT_THAT в цикл и выполнить итерацию по двум контейнерам.

...