如何在nsthread中测试一些东西

时间:2013-11-04 08:50:31

标签: ios ocunit

我想用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!

1 个答案:

答案 0 :(得分:1)

您可以使用dispatch_semaphoretestThread等到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