Тестирование модулей Xcode - доступ к ресурсам из пакета приложений?
У меня проблема, и я хотел подтвердить, что я делаю все правильно.
Я могу проверить простые вещи с помощью тестов SenTestingKit, и это работает нормально. Я установил пакет Unit Test и установил его как зависимость от основной цели приложения. Он успешно запускает все тесты всякий раз, когда я нажимаю cmd + B.
Здесь, где я сталкиваюсь с проблемами. У меня есть некоторые файлы XML, которые мне нужно загрузить из папки ресурсов в составе приложения. Являясь хорошим модульным тестером, я хочу написать об этом единичные тесты, чтобы убедиться, что они правильно загружаются.
Итак, у меня есть код, который выглядит так:
NSString *filePath = [[NSBundle mainBundle]
pathForResource:@"foo" ofType:@"xml"];
Это работает, когда приложение запускается, но во время unit test, mainBundle
указывает на неправильный пакет, поэтому эта строка кода возвращает nil.
Поэтому я изменил его, чтобы использовать известный класс следующим образом:
NSString *filePath = [[NSBundle bundleForClass:[Config class]]
pathForResource:@"foo" ofType:@"xml"];
Это тоже не работает, потому что для того, чтобы тест даже скомпилировал такой код, он Config
должен быть частью Unit Test Target. Если я добавлю это, то пакет для этого класса станет пакетом Unit Test. (Тьфу!)
Я подхожу к этому неправильно?
Ответы
Ответ 1
При попытке воспроизвести вашу проблему это ударило меня: вы пытались просто добавить свои ресурсы в свой тестовый комплект? Это вызовет проблемы для вас? Я сделал именно это, и это отлично поработало для меня. Например:
код:
- (void)testBundleLoading {
NSLog(@"Main Bundle Path: %@", [[NSBundle mainBundle] bundlePath]);
for (NSBundle *bundle in [NSBundle allBundles]) {
NSLog(@"%@: %@", [bundle bundleIdentifier],
[bundle pathForResource:@"fire" ofType:@"png"]);
}
}
Вывод:
2010-05-05 14:31:05.961 otest[16970:903] Main Bundle Path: /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.1.3.sdk/Developer/usr/bin
2010-05-05 14:31:05.962 otest[16970:903] (null): (null)
2010-05-05 14:31:05.963 otest[16970:903] com.freetimestudios.KayakKingTests: /Volumes/FreeTime/KayakKing/build/Debug-iphonesimulator/KayakKingTests.octest/fire.png
Надеюсь, это поможет.
Ответ 2
Я столкнулся с этой проблемой с Xcode 4, и моя проблема заключалась в том, что у меня был старый проект Xcode 3, и каким-то образом информационный слой для тестовой цели пропал без вести. Я добавил проект UnitTests-Info.plist в проект, и мне вдруг удалось снова получить ресурсы.