我有以下失败的单元测试。我认为这是因为OCMock
在多个线程中不能很好地工作,但我可能是错的。mockTestMethodA
永远不会被调用。如果我修改代码以testMethodA
在同一线程上调用 (不带NSThread
),则存根似乎可以工作。这是一个已知的限制OCMock
还是我错过了什么?
示例代码:
- (void) testCallMethodUsingNSThreadFromADifferentClass
{
mockTestClassA = [OCMockObject partialMockForObject:testClassA];
[[[mockTestClassA expect] andCall:@selector(mockTestMethodA) onObject:self] testMethodA];
[testClassC threadedRequestToCallMethodA];
[self waitForCompletion:5.0];
[mockTestClassA verify];
}
threadedRequestToCallMethodA
和callMethodAFromTestClassC
inTestClassC
定义如下:
- (void) threadedRequestToCallMethodA
{
[NSThread detachNewThreadSelector:@selector(callMethodAFromTestClassC) toTarget:self withObject:nil];
}
- (void) callMethodAFromTestClassC
{
[[[TestClassA alloc] init] testMethodA];
}
testMethodA
inTestClassA
定义为:
- (void) testMethodA
{
NSLog(@"testMethodA");
}
存根方法定义如下:
- (void) mockTestMethodA
{
NSLog(@"mockTestMethodA");
}
最后waitForCompletion
:
- (BOOL) waitForCompletion:(NSTimeInterval)timeoutSecs
{
NSDate *timeoutDate = [NSDate dateWithTimeIntervalSinceNow:timeoutSecs];
do {
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:timeoutDate];
if([timeoutDate timeIntervalSinceNow] < 0.0)
break;
} while (!done);
return done;
}
感谢您的帮助。
谢谢。