【发布时间】:2014-11-26 03:14:05
【问题描述】:
我在模拟 c++ 析构函数时遇到了一些奇怪的行为,如 google mock cookbook 中所述。类和mock如下:
// 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。 测试未删除的对象是否被破坏。这个测试没有似乎失败了,尽管我预计它会失败。 (请注意,我注释掉了删除命令)。在程序结束时,有一些模拟对象永远不会被删除的警告。
// 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 通过?
【问题讨论】:
标签: c++ googlemock