Я установил Google Toolbox для Mac в Xcode и следовал инструкциям по настройке модульного тестирования, найденных здесь .
Все это прекрасно работает, и я могу тестировать свои синхронные методы на всех моих объектах абсолютно нормально. Однако большинство сложных API-интерфейсов, которые я на самом деле хочу протестировать, возвращают результаты асинхронно, вызывая метод для делегата - например, вызов системы загрузки и обновления файлов сразу же возвращается, а затем запускает -fileDownloadDidComplete: метод после завершения загрузки файла. .
Как бы я проверил это как юнит-тест?
Похоже, я бы хотел, чтобы функция testDownload или, по крайней мере, тестовая среда ожидала запуска fileDownloadDidComplete: метод.
РЕДАКТИРОВАТЬ: Теперь я переключился на использование встроенной системы XCode XCTest и обнаружил, что TVRSMonitor на Github предоставляет простой и удобный способ использования семафоров для ожидания завершения асинхронных операций.
Например:
- (void)testLogin {
TRVSMonitor *monitor = [TRVSMonitor monitor];
__block NSString *theToken;
[[Server instance] loginWithUsername:@"foo" password:@"bar"
success:^(NSString *token) {
theToken = token;
[monitor signal];
}
failure:^(NSError *error) {
[monitor signal];
}];
[monitor wait];
XCTAssert(theToken, @"Getting token");
}