неділя, 31 березня 2013 р.
Droid App of the Day - a new Android app recommendation every day!: Words Builder
Droid App of the Day - a new Android app recommendation every day!: Words Builder: Today's app of the day is Words Builder. If you are a fan of puzzle games, then you should not go past Word Builder. From the Screensh...
пʼятниця, 30 листопада 2012 р.
UnitTests и dispatch_async
Некоторое время назад начал использовать библиотеку AFNetworking для загрузки данных с S3. Загрузку выполняю примерно следующим кодом:
AFHTTPRequestOperation* loadOperation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
[loadOperation setCompletionBlockWithSuccess:...]
...
В приложении все прекрасно работает, а вот в тесте success block не отрабатывал. Решение нашлось здесь и здесь. Если коротко, проблема в том, что блоки в AFNetworking вызываются через dispatch_async - они ставятся в FIFO-очередь, но в тестах очередь :) до их выполнения може не дойти. Решилась проблема добавлением кода в текст:
NSDate* loopUntil = [NSDate dateWithTimeIntervalSinceNow:2];
while ([loopUntil timeIntervalSinceNow] > 0) {
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:loopUntil];
}
Тесты заработали как надо.
вівторок, 13 листопада 2012 р.
UnitTests and Documents directory
Столкнулся с одной особенностью при использовании функции NSSearchPathForDirectoriesInDomains в юнит-тестах.
При прораммировании под iOS часто определяют расположение каталога Documents следующим кодом:
При прораммировании под iOS часто определяют расположение каталога Documents следующим кодом:
[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]
При работе в симуляторе данный код вернет что-то подобное:
~/Library/Application Support/iPhone Simulator/5.1/Applications/06DA815C-9869-408E-AB8A-9A4364CEC873/Documents
Однако для юнит-тестов в название каталога не добавляется айди приложения и функция возвращает:
~/Library/Application Support/iPhone Simulator/5.1/Applications/Documents
А вот такого каталога в системе может и не быть, из-за чего попытки создания подкаталогов будут завершаться с ошибкой. Заборол эту проблему, создавая в методе setUp нужные каталоги:
NSFileManager* fileMgr = [NSFileManager defaultManager];
...
if (![fileMgr fileExistsAtPath:dmDir])
[fileMgr createDirectoryAtPath:dmDir withIntermediateDirectories:YES attributes:nil error:nil];
Підписатися на:
Дописи (Atom)