我必须测试一个提供自己的内存分配例程的库:
void* allocation_routine(size_t size) throw();
文档说明此函数至少分配 size 字节的内存(允许分配更多)。顺便说一句,该函数在内部使用 posix_memalign,但实现可能会发生变化。
我想知道是否可以为这种功能编写单元测试?我们如何测试是否分配了所需的内存量?
更新:
如果我们不能编写单元测试,那么最接近的解决方案是什么?
最佳答案
你不能为这个函数编写单元测试,因为你不能在没有系统调用的情况下在堆上分配内存。因此,这是一个集成测试,因为您无法将被测单元与操作系统隔离开来。
我将创建一个新的小型可执行文件,它为 n
个字节调用 allocation_routine
。根据 allocation_routine
应该返回的内容,您可以断言它是非 nullptr
。然后,将 n
个字节写入此内存区域。使用 address sanitizer 编译并链接它(gcc
和 clang
都可用),然后尝试将其集成到应用程序的测试运行程序中(ctest
等)。
您可能还想通过 POSIX setrlimit 限制可用堆在分配失败时验证行为。
关于c++ - 我们可以对内存分配进行单元测试吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55702021/