为什么googlemock报告一个泄露的模拟,当我可以看到它被删除
Why does googlemock report a leaked mock when I can see it being deleted?
我正在尝试将单元测试和模拟添加到遗留项目中。作为这个过程的一部分,我部分地模拟了其中一个类,只模拟了我目前正在测试的类中需要的方法。然后我将这个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
相关文章:
- 函数向量_指针有不同的原型,我可以构建一个吗
- 我可以使用 g++ 进行三种比较 (<=>) 吗?
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 我可以信任表示整数的浮点或双精度来保持精度吗
- 我可以将一个用clang c++11编译的对象与另一个用c++17编译的对象链接起来吗
- 为什么我可以通过引用修改常量返回
- 我可以在 C++ 中的函数体之外进行操作吗?
- 我可以重新分配/覆盖std::字符串吗
- C++-我可以创建另一个类的成员并在构造函数中使用它吗
- 我可以将调用类的"this"传递给 lambda 函数吗?
- 我可以检测和更改 gcc/g++ 中结构的当前数据对齐设置吗?
- 为什么我可以使用比分配的内存更多的内存
- 在一个读写器队列中,我可以用volatile替换原子吗
- 我可以把基础班提升为儿童班吗
- (如何)我可以在Windows上模拟触摸事件吗?
- 有没有一种方法可以模拟C++中的按键,没有软件可以说我实际上没有按下按键
- 我可以用什么UI库或其他东西来模拟用C++移动东西的交通状况
- 我可以复制一个谷歌模拟对象后设置期望
- 为什么googlemock报告一个泄露的模拟,当我可以看到它被删除
- 如何测试使用 MPI 调用的 CC++ 代码:是否有任何一组我可以使用的模拟函数