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

Which test frameworks don't replace "new" and "malloc"?

本文关键字:new malloc 取代 测试 框架 不能      更新时间:2023-10-16

在我当前的项目中,我使用自己的自定义分配器,其灵感来自BitSquid上的文章。我还替换了new和malloc,以帮助我追踪它们的使用位置(因为这应该被最小化——目前在任何地方都没有调用。)

我读到过许多更成熟的C++测试框架(例如CppUTest)依赖于它们自己的新malloc重载。有没有没有?如果有帮助的话,我的项目是跨平台的(Windows、Linux、Mac和手机)。

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

Boost测试并不是基于他自己的新malloc重载,我实际上使用了Boost测试,并且我创建了新的malloc过载来查看(行和文件)内存泄漏发生在哪里。

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

下面的代码是.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的某些部分(而不是测试部分)重载了新操作符,而且我还有另一个库,它内部重载了新运算符,所以通过将其包含在includes列表的末尾,我确信我不会破坏库的内部。

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

如果您不想包含Boost或新库,而只想确保分配/取消分配正确进行。按照以下步骤操作。1.让你的新衣服超载。2.在重载的new中添加引用计数机制。3.在测试用例中,使用assert检查开始和结束时的引用计数。

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