Как использовать (умный) указатель на макет объекта (в Google Mock) - PullRequest
1 голос
/ 27 июня 2019

Когда я сохраняю свой макет объекта в куче, используя shared_ptr, ожидания оправдываются и указатель уничтожается, но среда GMock считает, что макет объекта все еще жив:

// Using a mock object
MockFoo foo;
EXPECT_CALL(foo, doSomething());
foo.doSomething();
// Test passes without warnings
// Using shared_ptr to a mock object
auto foo_sp = std::make_shared<MockFoo>();
EXPECT_CALL(*foo_sp, doSomething());
A a(std::move(foo_sp));
a.useFoo();
// a is then deleted
...
// in useFoo:
foo_sp->doSomething();
...
// Test passes WITH warnings that mock object is still alive

Это ошибка в фреймворке Google Mock? Если нет, то как я могу сохранить мой макет объекта в куче в интеллектуальном указателе и правильно его использовать?

1 Ответ

0 голосов
/ 27 июня 2019

Спасибо @YSC, @sklott и @Yksisarvinen, которые указали мне правильное направление.

Для тех, у кого есть подобные проблемы. Оказалось, что в моем случае проблема не была связана с фальшивой структурой Google C ++. Я передавал фиктивный объект производному классу, деструктор базового класса которого не был объявлен как виртуальный. Поэтому деструктор владельца макета никогда не вызывался, а фиктивный объект оставался живым.

...