我正在尝试对我的代码进行一些单元测试。我面临一个问题,单元测试功能没有等待异步请求完成。我只想在我测试它时等待它,而不是在我运行它时等待它。
我想出了如何检查这个:
if([[[[NSProcessInfo processInfo] environment] objectForKey:@"TARGET"] isEqualToString:@"TEST"])
在我的项目中设置了相应的环境变量。但我找不到合适的方法来等待它。我尝试使用信号量,并且有效,但是如果有任何其他更容易且对读者友好的方式,我正在徘徊。
编辑 :
最后,我这样做了:我想我本可以做得更好,但这对我来说很有效并且看起来很公平。
static int statusCode;
- (void)requestContent:(NSString*)urlString
{
statusCode = 0;
NSLog(@"Request Content");
NSURL *url = [NSURL URLWithString:urlString];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request
success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON)
{
[self ParseGoogleImageSearchResponse:JSON];
statusCode = 1;
NSLog(@"Done");
}
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON)
{
NSLog(@"%@", [error userInfo]);
statusCode = 2;
}];
[operation start];
if([[[[NSProcessInfo processInfo] environment] objectForKey:@"TARGET"] isEqualToString:@"TEST"])
{
while(statusCode == 0)
{
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate date]];
NSLog(@"WAITING");
}
}
}