为什么googlemock报告一个泄露的模拟,当我可以看到它被删除

Why does googlemock report a leaked mock when I can see it being deleted?

本文关键字:我可以 模拟 删除 报告 googlemock 一个 为什么      更新时间:2023-10-16

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

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.

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

问题是我没有将析构函数声明为virtual,因此在实际代码中它调用的是基类析构函数,而不是我的模拟析构函数。

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