Pil*_*lsy 8 c unit-testing memory-management libc
单元测试涉及失败的代码路径的最佳方法是什么malloc()?在大多数情况下,它可能并不重要,因为你正在做类似的事情
thingy *my_thingy = malloc(sizeof(thingy));
if (my_thingy == NULL) {
fprintf(stderr, "We're so screwed!\n");
exit(EXIT_FAILURE);
}
Run Code Online (Sandbox Code Playgroud)
但在某些情况下,除了死亡之外你还有其他选择,因为你已经为缓存或其他任何东西分配了一些额外的东西,你可以收回那些记忆.
但是,在那些您可以尝试从失败malloc()中恢复的情况下,您在代码路径中执行的操作非常棘手并且容易出错,这使得测试变得尤为重要.你是怎么做到这一点的?
Ant*_*ima 16
我看到S. Paavolainen向我提出了这个问题的一个很酷的解决方案.我们的想法是malloc()通过自定义分配器来覆盖您可以在链接器中执行的标准
malloc()NULL然后,您只需多次运行单元测试:该系统通过不同的控制路径自动枚举malloc()故障,并且比例如随机测试更有效和可靠.