我必须测试一个提供自己的内存分配例程的库:
void* allocation_routine(size_t size) throw();
文档指出,此函数至少分配大小字节的内存(允许分配更多字节)。顺便说一下,该函数在内部使用posix_memalign,但是实现可能会发生变化。
我想知道是否可以为这种功能编写单元测试?我们如何测试是否分配了所需的内存量?
更新:
如果我们不能编写单元测试,那么最接近的解决方案是什么?
答案 0 :(得分:16)
您不能为此功能编写单元测试,因为没有系统调用就无法在堆上分配内存。因此,这是一个集成测试,因为您无法将被测单元与操作系统隔离。
我将创建一个新的小型可执行文件,该文件将allocation_routine
个字节调用n
。根据应该返回的allocation_routine
,可以断言它不是nullptr
。然后,将n
个字节写入此内存区域。使用 address sanitizer (地址gcc
和clang
都可用)编译并链接它,然后尝试将其集成到应用程序的测试运行器(ctest
等)。
您可能还希望通过POSIX setrlimit限制可用堆,以在分配失败时验证行为。
答案 1 :(得分:0)
这不是单元测试,但是您可以使用Valgrind获取有关内存的其他信息。
它主要用于调试,但是如果分配不正确,它将警告您。