1

我正在尝试通过单元测试对我的应用程序进行一些压力测试,但遇到了一些问题。下面是我的代码:

    //Stress test api and core data
__block BOOL done = NO;
for (int i = 0; i < 100 ; i++) {
    DLog(@"in here");
    [viewController createList:testList
                       success:^(Lists *list) {
                           DLog(@"in success block : %d", i);
                           STAssertNotNil(list, @"list is not nil");
                           done = (i == 99);
                       }
                       failure:^(NSError *error) {
                           DLog(@"in fail block");
                       }
     ];        
}

@autoreleasepool {

    while (!done) {
        // This executes another run loop.
        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
    }
}

问题是,经过几次迭代后,我在线上遇到了错误的访问错误

[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];

因为这篇文章,我已经把while循环放在了。我在项目中使用ARC,所以我不知道这是否会导致问题..?我需要使用来强制单元测试等待块完成。@autoreleaseNSRunLoop

有没有人遇到过这个问题?

4

1 回答 1

2

在类似的情况下,我做了不同的事情并且效果很好。我所做的是在主测试中,将 dispatch_group_async 用于普通队列,然后在主测试中等待组完成。这工作得很好,你不会弄乱单元测试的运行循环。

如果由于某种原因上述内容不可接受,则尝试不使用任何自动释放池以查看是否有效。如果有效,则将其移至 while 外观。使用 ARC,对自动释放池的需求大大减少。您也可以使用仪器观察内存使用情况。

于 2013-06-10T20:44:22.430 回答