gpt4 book ai didi

c++ - 当我看到它被删除时,为什么 googlemock 报告泄漏的模拟?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:34:01 25 4
gpt4 key购买 nike

我正在尝试向遗留项目添加单元测试和模拟。作为其中的一部分,我部分模拟了其中一个类,只模拟了我当前正在测试的类中需要的方法。然后我将这个模拟传递给类以进行依赖注入(inject)并在析构函数中将其删除,但是当我运行测试时它会提示:

ERROR: this mock object (used in test xxxx) should be deleted but never is. Its address is @0000000004208AD0.
ERROR: 1 leaked mock object found at program exit.

通过代码进行调试时,我可以看到在析构函数中对模拟对象调用了 delete,但它仍在提示。如果我在测试结束时再次调用 delete,我会抛出一个 SEH 异常,因为我正在尝试删除已经被取消分配的内存,但是如果我在析构函数中注释掉 delete 那么它就可以工作(但这显然会导致内存泄漏)

最佳答案

问题是我没有声明析构函数是虚拟的,所以在实际代码中它调用的是基类析构函数而不是我的模拟析构函数。

根据我在测试中删除模拟时关于它工作的最后声明,这对某些人来说可能是显而易见的,但我花了一段时间才弄明白,直到我找到这个链接,所以我想我应该分享它在 SO 上也是如此 http://wahz.blogspot.ca/2014/08/google-mock-dammit-gets-me-every-time.html

关于c++ - 当我看到它被删除时,为什么 googlemock 报告泄漏的模拟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33046558/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com