con*_*com 5 c macos unit-testing
我试图strdup在C中复制这个功能.这是学校练习的一部分.我想单元测试,其中包括情况下malloc返回NULL,并设置errno到ENOMEM.
我在OSX 10.8上.
我已经尝试限制stacksize,然后datasize,在堆上实现malloc分配:
limit stacksize 0
limit datasize 0
Run Code Online (Sandbox Code Playgroud)
确认限制应该有效:
my-host% limit
cputime unlimited
filesize unlimited
datasize 0kB
stacksize 0kB
coredumpsize 0kB
addressspace unlimited
memorylocked unlimited
maxproc 709
descriptors 256
Run Code Online (Sandbox Code Playgroud)
但是,即使堆栈大小限制为0kB,我也可以正常运行程序.所以我认为我的主机可能对最小堆栈大小有限制.
我怎么能测试malloc返回的情况NULL呢?
我建议你伪造内存分配失败。例如,我需要在分配 3D 数组期间测试内存故障(需要清理大量内存),因此我使用了一个框架,在该框架中xmalloc()调用函数来获取内存,并由测试程序控制何时xmalloc()会失败。
static int fail_after = 0;
static int num_allocs = 0;
static void *xmalloc(size_t size)
{
if (fail_after > 0 && num_allocs++ >= fail_after)
{
fputs("Out of memory\n", stdout);
return 0;
}
return malloc(size);
}
...code using xmalloc...
int main(int argc, char **argv)
{
int no1 = 5;
int fail_limit = 33;
if (argc == 2)
fail_limit = atoi(argv[1]);
for (fail_after = 0; fail_after < fail_limit; fail_after++)
{
printf("Fail after: %d\n", fail_after);
num_allocs = 0;
test_allocation(no1);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编写您的strdup()代理以xmalloc()代替malloc(). 或多或少地进行测试,如图所示。您可以更喜欢“内存不足”的要求;这是基本但有效的。
| 归档时间: |
|
| 查看次数: |
708 次 |
| 最近记录: |