Тестирование модульного 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

Другие вопросы по тегам