c++ - 哪些测试框架不会替换 "new"和 "malloc"?

标签 c++ unit-testing operator-overloading

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

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

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

最佳答案

例如,Boost Tests 并不基于他自己的 new/malloc 重载,我实际上使用 BOOST TESTS 并且创建了 new/malloc 重载来查看(行和文件)内存泄漏发生的位置。

BOOST 是跨平台的,但由于我在 Windows 上进行所有开发,所以我使用了一些现有的类似 malloc 的函数 (crtdbg.h) 重载,并且只是重载了 new 运算符。如果您需要跨平台测试,您可以手动重载 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

关于c++ - 哪些测试框架不会替换 "new"和 "malloc"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8795813/

相关文章:

c++ - std string vs char performance,从一开始就删除部分的最佳技术

unit-testing - 如何对某些输入陷入无限循环的方法进行单元测试?

Xcode:如何测试主包 .plist 文件内容?

c++ - vector 中存储的表达式的惰性求值

c# - 对于具有多个 == 运算符覆盖的类,空检查是不明确的

c++ - 你如何在 win32 中的 WM_CREATE 消息之外创建一个按钮?

c++ - boost::asio::io_service 是否保留处理程序的顺序?

python - 从 C++ 应用程序返回多个输出

java - 如何测试MultiChoiceItems android对话框

c++ - C++ 中的 typedef 和运算符重载