Тестирование модульного iOS не удается получить доступ к KeyChain
Я пытаюсь написать модульные тесты для платформы iOS, которую я создаю. Под крышками используется Nuance's Dragon Mobile SDK. Когда я запускаю свой модульный тест в AppCode Jetbrains, я получаю эту ошибку:
2012-08-15 17:43:48.874 otest[62547:707] *** Assertion failure in -[KeychainManager writeToKeychain], /checkout_120606-1556/NMSPClient/sdk/c/trunk/solutions/iPhone/NMSP/../../../source/oem/iphone/src/KeychainManager.m:285
Couldn't add the Keychain Item.
Unknown.m:0: error: -[NuanceVoiceRecognizerTest testExample] : Couldn't add the Keychain Item.
Когда я запускаю тест в XCode, он работает нормально. На самом деле XCode раскручивает симулятор для запуска теста, тогда как AppCode, похоже, не хочет / не хочет.
Причина, по которой бит Nuance важен, заключается в том, что именно он пытается что-то делать с цепочкой для ключей, когда я ее настраиваю:
[SpeechKit setupWithID:@"<snip>"
host:@"sandbox.nmdp.nuancemobility.net"
port:443
useSSL:NO
delegate:self];
Теперь я знаю, что один ответ здесь - просто запустить тест в XCode. Но мне очень тяжело с XCode, учитывая, насколько он примитивен в области редактирования кода. Что еще более важно, мне не хватает какой-то ключевой концепции здесь, и это меня раздражает.
На вопрос: что может отсутствовать, что может привести к тому, что мой код не сможет получить доступ к хранилищу ключей при запуске модульного теста? Кто-нибудь сталкивался с подобными вещами раньше, даже в XCode?
2 ответа
Если они еще не установлены, вы можете попробовать отредактировать настройки сборки BUNDLE_LOADER и TEST_HOST для своей цели модульного теста, чтобы она указала на комплект приложений (возможно, что-то вроде $(BUILT_PRODUCTS_DIR)/AppName.app/AppName).
Я думаю, что доступ к цепочке для ключей предположительно (я не использовал его) должен происходить из запущенного приложения. Эти две настройки позволяют выполнять модульные тесты OCUnit в процессе приложения (т. Е. Делать их, по терминологии Apple, "Тесты приложений", а не "Логические тесты").
Пакет модульных тестов, настроенный Xcode в мастере проекта, настроен как тест приложения, но добавленные впоследствии тестовые комплекты являются логическими тестами. Если вы добавили цель модульного тестирования позже, возможно, у нее нет вышеуказанных настроек сборки.
Что касается того, почему XCode запускает тесты как есть: из моего тестирования кажется, что XCode всегда запускает симулятор и запускает тесты в основном приложении, независимо от настроек загрузчика комплекта и хостов тестов. Я думаю, что это неправильное поведение в соответствии с документацией Apple, но, похоже, это то, что он делает.
Вот обсуждение форума AppCode: http://devnet.jetbrains.net/message/5466009