コードで単体テストを実行しようとしています。問題に直面しています。単体テスト関数は、非同期要求が完了するのを待っていません。実行時ではなく、テスト中の場合にのみ待ちたいと思います。
これを確認する方法を見つけました:
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");
}
}
}