我们可以对内存分配进行单元测试吗?

时间:2019-04-16 06:40:00

标签: c++ c linux unit-testing memory-management

我必须测试一个提供自己的内存分配例程的库:

void* allocation_routine(size_t size) throw();

文档指出,此函数至少分配大小字节的内存(允许分配更多字节)。顺便说一下,该函数在内部使用posix_memalign,但是实现可能会发生变化。

我想知道是否可以为这种功能编写单元测试?我们如何测试是否分配了所需的内存量?

更新:

如果我们不能编写单元测试,那么最接近的解决方案是什么?

2 个答案:

答案 0 :(得分:16)

您不能为此功能编写单元测试,因为没有系统调用就无法在堆上分配内存。因此,这是一个集成测试,因为您无法将被测单元与操作系统隔离。

我将创建一个新的小型可执行文件,该文件将allocation_routine个字节调用n。根据应该返回的allocation_routine,可以断言它不是nullptr。然后,将n个字节写入此内存区域。使用 address sanitizer (地址gccclang都可用)编译并链接它,然后尝试将其集成到应用程序的测试运行器(ctest等)。

您可能还希望通过POSIX setrlimit限制可用堆,以在分配失败时验证行为。

答案 1 :(得分:0)

这不是单元测试,但是您可以使用Valgrind获取有关内存的其他信息。

  • 内存泄漏(不是免费的)
  • 内存问题

它主要用于调试,但是如果分配不正确,它将警告您。