2015-06-18 52 views
1

我有一個XCTTestClass,它具有異步設置方法。這需要一些時間(必須解析文件,將它們插入bd等),並且我想確保我的測試只在完成此設置後運行。異步setUp方法完成後運行測試

我該怎麼做?

回答

2

您可以使用信號量等到您從異步調用中獲得結果。

dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); 
// Do your async call here 
// Once you get the response back signal: 
[self asyncCallWithCompletionBlock:^(id result) { 
    dispatch_semaphore_signal(semaphore); 
}]; 
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); 
0

在您的-setup方法中,使用上面的信號量或使用dispatch_group。 dispatch_group是我的首選方法。

@implementation XCTTestSubClass() 
{ 
    dispatch_group_t _dispatchGroup; 
} 
@end 

-(id)init 
{ 
    _dispatchGroup = dispatch_group_create(); 
    return [super init]; 
} 

-(void)setup 
{ 
    dispatch_group_async(_dispatchGroup, dispatch_get_current_queue(), ^{ 
     //your setup code here. 
    }); 
} 

然後覆蓋-invokeTest並確保組塊(設置)已完成運行。

-(void)invokeTest 
{ 
    dispatch_group_notify(group, dispatch_get_current_queue(), ^{ 
     [super invokeTest]; 
    }); 
} 

這保證了-setup完成後的測試纔會運行。