Использование Gmock для проверки вызова деструктора
-
12-10-2019 - |
Вопрос
Используя Gmock, как я могу проверить, что деструктор класса называется? Есть ли способ, кроме как Обернуть его в другой класс?
Очевидный метод, EXPECT_CALL(object, ~classtype())
дает ошибку компилятора (Gmock не может создать макетный метод, вызванный gmock_~classtype
).
Решение
Простой способ проверить звонок деструктора:
class MockFoo : public Foo {
...
// Add the following two lines to the mock class.
MOCK_METHOD0(Die, void());
virtual ~MockFoo() { Die(); }
};
В вашей функции теста:
MockFoo* foo = new MockFoo;
...
{
EXPECT_CALL(*foo, Die());
}
Более подробную информацию можно найти здесь: Насмешливые деструкторы
Другие советы
Если вы не пройдете --gmock_catch_leaked_mocks=0
, тогда Gmock уже должен обнаружить, когда вы не можете уничтожить макет. Деструктор - это то, где неудовлетворенные ожидания помечаются как ошибки, поэтому GMOCK имеет специальную поддержку для обнаружения, когда его не вызывается.
Не связан с StackOverflow