Первое: ссылка Станислава отличная.
Для себя мне нужно было что-то более гибкое (работать в течение длительного времени), но также сразу же успешно проходить тест. (Загрузка больших файлов и тому подобное.)
Вот моя полезная функция:
-(BOOL)runLooperDooper:(NSTimeInterval)timeoutInSeconds
optionalTestName:(NSString *)testName
{
NSDate* giveUpDate = [NSDate dateWithTimeIntervalSinceNow:timeoutInSeconds];
// loop until the operation completes and sets stopRunLoop = TRUE
// or until the timeout has expired
while (!stopRunLoop && [giveUpDate timeIntervalSinceNow] > 0)
{
// run the current run loop for 1.0 second(s) to give the operation code a chance to work
NSDate *stopDate = [NSDate dateWithTimeIntervalSinceNow:1.0];
[[NSRunLoop currentRunLoop] runUntilDate:stopDate];
}
STAssertTrue(stopRunLoop,
@"%@ failed to finish before runloop expired after %f seconds", testName, timeoutInSeconds);
return stopRunLoop;
}
Объявите stopRunLoop в качестве ивара в вашем классе тестеров. Обязательно сбросьте stopRunLoop в FALSE в вашей функции setUp
и вызовите эту функцию до вызова вашего [client processRequest:@"http://google.com" delegate:self];
Затем в ваших обработчиках событий установите для stopRunLoop значение TRUE.
Передав ему testName, вы можете использовать его для нескольких тестов и получить несколько значимых сообщений об ошибках.
Редактировать: 99% уверены, что я основал приведенный выше код на другом посте StackOverflow, который я не могу найти в данный момент, или я бы связал его.