Я столкнулся с каким-то странным поведением, когда насмехался с деструктором C++, как описано в google mock cookbook. Класс и издеваться следующим образом:Утечка Google Mock Object не сработала
// System under test
class Base {
public:
virtual ~Base(){};
};
// Mocked class
class MockBase : public Base {
public:
MOCK_METHOD0(Die, void());
virtual ~MockBase() { Die(); }
};
Тест 1. теста, что фиктивный объект разрушается один раз. Этот тест проходит просто отлично.
// Test 1.
MockBase * mb1 = new MockBase();
EXPECT_CALL(*mb1, Die()).Times(1);
delete mb1;
Тест 2. Ожидая объект будет разрушен дважды, терпит неудачу. Это также имеет смысл.
// Test 2. This fails -> ok.
MockBase * mb2 = new MockBase();
EXPECT_CALL(*mb2, Die()).Times(2);
delete mb2;
Тест 3. тестирование, что не удаленный объект разрушается. Этот тест делает не, похоже, терпит неудачу, хотя я ожидал, что он потерпит неудачу. (обратите внимание, что я прокомментировал команду delete). В конце программы есть предупреждения о том, что некоторые издевавшиеся объекты никогда не удаляются.
// Test 3. This does not fail
MockBase * mb3 = new MockBase();
EXPECT_CALL(*mb3, Die()).Times(1);
//delete mb3;
Тест 4. тестирование, что не удаленный объект разрушается дважды. Этот тест, похоже, тоже не сработает. Подобно тесту 3, я тоже не удалял эту mockBase, поэтому я ожидал бы, что это тоже не удастся. Я даже увеличил количество раз, которое, как я ожидаю, будет называться, но он все равно не подводит.
// This does not fail
MockBase * mb4 = new MockBase();
EXPECT_CALL(*mb4, Die()).Times(2);
//delete mb4;
Может кто-нибудь объяснить, почему испытания 3 и 4 проходят?