Использование Gmock для проверки вызова деструктора

StackOverflow https://stackoverflow.com/questions/4734633

Вопрос

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top