失敗している次の単体テストがあります。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;
}
あなたの助けに感謝します。
ありがとう。