2
我有以下單元測試失敗。我認爲它是因爲OCMock
在多個線程中不起作用,但我可能是錯的。 mockTestMethodA
永遠不會被調用。如果我修改了代碼以在同一線程(不含NSThread
)上調用testMethodA
,則存根似乎工作。這是一個已知的限制OCMock
還是我錯過了什麼?如何在使用OCMock的不同線程上正確存根方法?
樣品的編號:
- (void) testCallMethodUsingNSThreadFromADifferentClass
{
mockTestClassA = [OCMockObject partialMockForObject:testClassA];
[[[mockTestClassA expect] andCall:@selector(mockTestMethodA) onObject:self] testMethodA];
[testClassC threadedRequestToCallMethodA];
[self waitForCompletion:5.0];
[mockTestClassA verify];
}
threadedRequestToCallMethodA
和TestClassC
callMethodAFromTestClassC
定義如下:
- (void) threadedRequestToCallMethodA
{
[NSThread detachNewThreadSelector:@selector(callMethodAFromTestClassC) toTarget:self withObject:nil];
}
- (void) callMethodAFromTestClassC
{
[[[TestClassA alloc] init] testMethodA];
}
testMethodA
在TestClassA
定義爲:
- (void) testMethodA
{
NSLog(@"testMethodA");
}
存根方法被定義爲FOLL OWS:
- (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;
}
您的幫助表示讚賞。
謝謝。
感謝您的幫助。 – 2013-04-23 21:22:44