我在iOS的单元测试中使用NSLog
时遇到了一个奇怪的问题。
这是我在单元测试中使用的测试代码。
- (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");
}
www.google.com
运行,或先让www.apple.com
运行。dispatch_semaphore_xxx
的使用更改为sleep()
。NSLog()
更改为printf()
谢谢你们!
答案 0 :(得分:0)
这是SenTest和NSLog的问题。基本上,日志通过管道传送到测试运行器,测试运行器将数据发送回XCode中的控制台窗口。
NSLog写入stderr,因此如果将其重定向到文件,则可以获取日志数据。
不幸的是,当一切都完成后,将它全部写回来还需要一段时间。
如果我需要在测试期间记录一堆数据,我会将stderr重定向到一个文件,然后在测试运行时“tail -f”它,如果我想看它滚动。当它结束时,我可以在mvim或XCode中查看文件。