大中央调度和单元测试(Grand Central Dispatch and unit testing

2019-07-29 13:02发布

我写了如下苹果的一个简单的测试用例文档 ,我没有看到,我很期待的结果。

下面的代码:

- (void)testExample2
{
    NSLog(@"1");

    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); 

    dispatch_async(dispatch_get_main_queue(), ^{
        NSLog(@"3");
             dispatch_semaphore_signal(semaphore);
        });

    NSLog(@"2");
    dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);

    NSLog(@"4");    
    dispatch_release(semaphore);    
}

我希望阅读:1,2,3,4,而是我的控制台只是表明我的1,3。

我已经能够解决使用问题DISPATCH_TIME_NOW在while循环与NSLoop一起下锅,但上面的代码应该用什么样工作,对吧?

干杯...

UPDATE

我才意识到,我应该使用单独的队列,而不是dispatch_main_queue()

Answer 1:

终于实现了我的下面tearDown

while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW)) {
    NSLog(@"...Tearing Down Tests..");
    [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
                             beforeDate:[NSDate dateWithTimeIntervalSinceNow:10]];
}
dispatch_release(semaphore);  

并推动建立信号进入setUp



文章来源: Grand Central Dispatch and unit testing