哪些测试框架不能取代“new”和“malloc”?

时间:2012-01-09 22:05:59

标签: c++ unit-testing operator-overloading

在我当前的项目中,我使用自己的article on BitSquid启发的自定义分配器。我还替换new和malloc以帮助我追踪它们的使用位置(因为这应该最小化 - 目前不在任何地方调用。)

我读过许多比较成熟的C ++测试框架(例如CppUTest)依赖于他们自己的new / malloc重载。那里有没有吗?如果有帮助,我的项目是跨平台的(Windows,Linux,Mac和手机)。

(编辑:最初忘了提到我们不使用Boost)

2 个答案:

答案 0 :(得分:3)

Boost Tests例如并不是基于他自己的new / malloc重载,我实际上使用了BOOST TESTS并且我已经创建了new / malloc重载来查看内存韭菜发生在哪里(行和文件)。

BOOST是跨平台的,但由于我在Windows上进行了所有开发,因此我使用了类似malloc的函数( crtdbg.h )的一些预先存在的重载,并且只是重载了新的运算符。如果您需要跨平台测试,可以手动重载malloc。

以下代码是 .h 文件的内容,该文件是每个 .cpp 文件的最后一个包含文件。

#ifdef _DEBUG

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>

#define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
#define new DEBUG_NEW

#endif

我使用这种方法是因为boost的某些部分(不是测试部分)重载了new运算符而且我还有另一个内部重载new运算符的库,所以通过在包含列表的末尾包含它我确定我不要搞乱我的图书馆的内部。

http://www.boost.org/doc/libs/1_48_0/libs/test/doc/html/index.html

答案 1 :(得分:1)

如果您不想包含Boost或新库,并且您只是想确保正确地进行分配/取消分配。跟着这些步骤。 1.超载新的。 2.在重载的新增内容中添加引用计数机制。 3.在您的测试用例中,使用assert来检查开始和结束时的引用计数。

这可能看起来像一个简单的设置,但会消除单元测试本身的许多可能的泄漏。