Я прочитал раздел в кулинарной книге gmock по телефону Mocking Destructors, но мне не повезло, что он работает. Мой код почти точно соответствует документу:Звонок с вызовом деструктора GMock
class MockFoo : public Foo {
public:
MockFoo() {}
MOCK_METHOD0(destroyMockFoo, void());
virtual ~MockFoo() { destroyMockFoo(); }
};
TEST_F(DestructorTest, shouldFail) {
MockFoo* foo = new MockFoo();
EXPECT_CALL(*foo, destroyMockFoo());
}
Но когда я запускаю код, тест проходит без ошибок. Я получаю ошибку в конце испытательного выхода о просочилась объекта:
DestructorTest.cpp:149: ERROR: this mock object (used in test DestructorTest.shouldFail) should be deleted but never is. Its address is @0x8178790.
ERROR: 1 leaked mock object found at program exit.
, но это не то, что я хочу, и не то, что доктор говорит, что должно произойти.
Так что же вы делаете неправильно?
'VerifyAndClearExpectations' будет работать, но правильное поведение здесь, я думаю, состоит в том, чтобы просто удалить макет объекта в конце теста. – VladLosev
Это тоже возможность, хотя я предполагаю, что прецедентом здесь является передача права собственности на объект-макет другому классу и проверка того, что другой класс правильно распоряжается макетом. Удаление макета в конце теста не позволит этого типа проверки. – Ian
Ян прав. В моем реальном тестировании передается право собственности на макет, и я решил проверить, что макет действительно удален. – DaveR