NSLog
iOS の単体テストでの使用に関する奇妙な問題に直面しています。
コード
これが、単体テストで使用しているテストコードです。
- (void)testExample
{
NSOperationQueue *newqueue = [[NSOperationQueue alloc] init];
NSURLRequest *request2 = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://www.apple.com"]];
dispatch_semaphore_t sema2 = dispatch_semaphore_create(0);
[NSURLConnection sendAsynchronousRequest:request2 queue:newqueue completionHandler:^(NSURLResponse *resp, NSData *data, NSError *error) {
// NSLog(@"2: Data: %@", data);
printf("2: Data: %s\n", [[data description] UTF8String]);
dispatch_semaphore_signal(sema2);
}];
// sleep(2);
dispatch_semaphore_wait(sema2, DISPATCH_TIME_FOREVER);
dispatch_release(sema2);
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://www.google.com"]];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
dispatch_semaphore_t sema = dispatch_semaphore_create(0);
[NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *resp, NSData *data, NSError *error) {
NSLog(@"1: Data: %@", data);
dispatch_semaphore_signal(sema);
}];
// sleep(2);
dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
dispatch_release(sema);
NSLog(@"Over");
}
コードを使用するには
- 単体テストで簡単な iOS プロジェクトを作成します。
- 上記のコードを xxxTest.m に貼り付けます
- ⌘ + u を押します
試したパターン
- 2 つの異なる URL の順序を変更します。たとえば、最初に実行
www.google.com
するか最初に実行するかを変更しwww.apple.com
ます。 dispatch_semaphore_xxx
の使用をに変更しますsleep()
。NSLog()
に変更printf()
- このコードを Cocoa コンソール アプリとして実行します。
- 2 番目の URL 要求のテストを削除します。
結果
- 走行時間 0.4秒~30秒
- 走行時間 0.4秒~30秒
- 走行時間 0.4秒~30秒
- 実行時間 ~0.4 秒
- 実行時間 ~0.4 秒
質問
- 最初の 3 つのパターンを試すとどうなりますか?
- あなたと同じような問題がありますか?
- これらの解決策はありますか?
君たちありがとう!