我有一个XCTTestClass,它有一个异步设置方法。这将花费一些时间(必须解析文件,将它们插入到bd中等),我想确保我的测试仅在完成此设置后运行。
我该怎么做?
答案 0 :(得分: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);
答案 1 :(得分: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
完成后才能运行测试。