Использование 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 имеет специальную поддержку для обнаружения, когда он не вызывается.