Использование GMock для проверки вызова деструктора
Используя GMock, как я могу проверить, вызван ли деструктор класса? Есть ли способ, кроме обернуть его в другой класс?
Очевидный метод EXPECT_CALL(object, ~classtype())
дает ошибку компилятора (gmock не может создать макетный метод под названием gmock_~classtype
).
Ответы
Ответ 1
Простой способ проверить вызов деструктора:
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());
}
Более подробную информацию можно найти здесь:
Насмешливые деструкторы
Ответ 2
Если вы не проходите --gmock_catch_leaked_mocks=0
, тогда gmock уже должен обнаруживать, когда вы не можете уничтожить макет. Деструктор - это то, где неудовлетворенные ожидания отмечены как ошибки, поэтому gmock имеет специальную поддержку для обнаружения, когда он не вызывается.