首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >GMock测试析构函数调用

GMock测试析构函数调用
EN

Stack Overflow用户
提问于 2015-01-22 17:04:12
回答 3查看 1.8K关注 0票数 1

我已经在模拟析构函数上阅读了gmock食谱中的部分,但是我没有办法让它开始工作。我的代码几乎就是医生所说的:

代码语言:javascript
运行
复制
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());
}

但是当我运行代码时,测试通过时没有出现错误。在关于泄漏对象的测试输出结束时,我确实得到了错误:

代码语言:javascript
运行
复制
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.

但这不是我想要的,也不是医生说的应该发生的事。

那你做错什么了?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-01-22 19:54:45

你不一定做错了什么。这里的问题是在模拟对象的析构函数中验证gmock期望,所以如果从来不调用析构函数,那么就不会验证期望。这就是在你的例子中发生的事情。

解决这个问题的简单方法是在模拟中显式验证期望:

代码语言:javascript
运行
复制
Mock::VerifyAndClearExpectations(foo);

这会给你你想要的行为。

票数 1
EN

Stack Overflow用户

发布于 2015-08-29 16:38:23

在测试结束时删除foo对象,这样它就不会泄漏对象。

票数 0
EN

Stack Overflow用户

发布于 2017-09-26 17:36:20

为了避免内存泄漏消息,您可以测试Mock::VerifyAndClearExpectations(foo)的返回值,如果对象为false,则显式删除该对象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28094564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档