0

我想使用 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");
}

在我的测试用例中,但是 thread2 没有运行,我该怎么办?3Q!

4

1 回答 1

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
于 2013-11-04T09:33:08.097 回答