Я пытался автоматизировать тесты по асинхронным запросам, но я не смог запустить что-либо в другом потоке, пока ожидала функция проверки. Вот функция тест:Может ли OCUnit полагаться на код в фоновом потоке? (для тестирования асинхронных запросов)
- (void) testBoxManagerConnexionStatus
{
ControlSender* cs = [ControlSender get];
requestShouldSucceed = YES;
[cs startCheckingReachabilityWithDelegate:self];
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:TIMEOUT_INTERVAL+1.0]];
STAssertTrue(downloadComplete, @"Download should be over by now");
}
Мой тестовый класс реализует методы обратного вызова этот путь:
- (void)controlSender:(ControlSender *)controlSender sentSuccessfullyCode:(FreeboxControl)code
{
if (requestShouldFail) {
STAssertTrue(NO, @"Request should have failed");
}
downloadComplete = YES;
}
- (void)controlSender:(ControlSender *)controlSender couldntSendCode:(FreeboxControl)code details:(NSHTTPURLResponse*)details
{
if (requestShouldSucceed) {
STAssertTrue(NO, @"Request should have succeded");
}
downloadComplete = YES;
}
Но всякий раз, когда мой обычный код попытаться запустить что-то в другом потоке ничего не происходит. Например, NSURLConnection не вызывать его методы делегата, когда выделяются:
m_connexion = [[NSURLConnection alloc] initWithRequest:m_networkRequest delegate:self];
Ни -connectionDidFinishLoading:
, ни -connection:didFailWithError:
То же самое и для вызовов, как этот:
[self performSelectorInBackground:@selector(BG_startCheckingReachabilityWithDelegate:) withObject:delegate];
Nothings вызывается, в фоновом режиме, когда запуск теста. Тот же код работает отлично за пределами теста. Есть ли способ проверить асинхронный запрос url с помощью OCUnit?
Спасибо за помощь.
Это действительно интересный материал. Спасибо, я попробую и дам вам знать, работает ли это. – mbritto 2010-12-01 08:52:20