Я пытался автоматизировать тестирование асинхронных запросов, но я не смог запустить что-либо в другом потоке, пока ожидала функция тестирования.
Вот тестовая функция:
- (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?
Спасибо за помощь.