我想用OCUnit来测试我的工作。 但我的一个方法是这样的:
- (BOOL)testThread
{
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(thread) object:nil];
[thread start];
return YES;
}
- (void)thread
{
NSLog(@"thread**********************");
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(thread2) object:nil];
[thread start];
}
- (void)thread2
{
NSLog(@"thread2**********************");
}
现在我要运行测试:
- (void)testExample
{
testNSThread *_testNSThread = [[testNSThread alloc] init];
STAssertTrue([_testNSThread testThread], @"test");
}
在我的测试用例中 但是线程2没有运行 所以我该怎么做? 3Q!
答案 0 :(得分:1)
您可以使用dispatch_semaphore
让testThread
等到thread2
完成:
@interface MyTests () {
dispatch_semaphore_t semaphore;
}
@implementation MyTests
- (void)setUp
{
[super setUp];
semaphore = dispatch_semaphore_create(0);
}
- (BOOL)testThread
{
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(thread) object:nil];
[thread start];
// Wait until the semaphore is signaled
while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW)) {
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:10]];
}
return YES;
}
- (void)thread
{
NSLog(@"thread**********************");
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(thread2) object:nil];
[thread start];
}
- (void)thread2
{
NSLog(@"thread2**********************");
// Signal the semaphore to release the wait lock
dispatch_semaphore_signal(semaphore);
}
@end