我正在尝试将单元测试和模拟添加到遗留项目中。作为其中的一部分,我部分嘲笑了其中一个类,嘲笑我正在测试的类中需要的方法。然后我将这个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异常,因为我正在尝试删除已经解除分配的内存,但如果我在析构函数中注释掉删除那么它可以工作(但这显然会导致内存泄漏)
答案 0 :(得分:4)
问题是我没有声明析构函数是虚拟的,所以在实际代码中它调用了基类析构函数而不是我的模拟析构函数。
根据我在测试中删除模拟时的最新声明,这可能是显而易见的,但是直到我找到这个链接我花了一段时间才弄明白,所以我想我会分享它在SO上也是如此 http://wahz.blogspot.ca/2014/08/google-mock-dammit-gets-me-every-time.html