Случайные ошибки при запуске набора тестов приложений OCUnit на устройстве
У меня возникли проблемы с моим набором тестов OCUnit, при запуске тестов приложений (т.е. на устройстве). Иногда я получаю сложную ошибку, которая, кажется, выбрасывается из классов OCUnit. Я пытаюсь просмотреть файлы, добавленные в тестовые пакеты, но не могу обойти его.
Я следил за документацией Apple и смотрел другие учебные пособия при настройке моих целевых объектов, в результате чего были достигнуты следующие цели (и отступы):
LogicTests
MyApp
LogicTests
ApplicationTests
MyApp
MyAppTesting
ApplicationTests
Последний (MyAppTesting) - это тот, который я запускаю на устройстве для запуска набора тестов.
И, как уже упоминалось, тесты не запускаются, иногда бросая мне следующий вывод в консоли:
2010-11-17 12:02:48.537 VCCTesting[12018:307] *** Assertion failure in -[SenTestClassEnumerator init], /SourceCache/OCUnit/OCUnit-1685/SourceCode/SenTestingKit/SenTestClassEnumerator.m:137
2010-11-17 12:02:48.556 VCCTesting[12018:307] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'objc_getClassList returned more classes than it should have.'
*** Call stack at first throw:
(
0 CoreFoundation 0x30897ed3 __exceptionPreprocess + 114
1 libobjc.A.dylib 0x3002f811 objc_exception_throw + 24
2 CoreFoundation 0x30897d15 +[NSException raise:format:arguments:] + 68
3 Foundation 0x349f932f -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 62
4 SenTestingKit 0x20107c29 -[SenTestClassEnumerator init] + 292
5 SenTestingKit 0x201079fd +[SenTestClassEnumerator classEnumerator] + 24
6 SenTestingKit 0x2010777d +[NSObject(SenTestRuntimeUtilities) senAllSubclasses] + 92
7 SenTestingKit 0x201067b5 +[SenTestSuite updateCache] + 28
8 SenTestingKit 0x20106753 +[SenTestSuite suiteForBundleCache] + 54
9 SenTestingKit 0x201065db +[SenTestSuite structuredTests] + 14
10 SenTestingKit 0x201065a1 +[SenTestSuite allTests] + 40
11 SenTestingKit 0x20106573 +[SenTestSuite defaultTestSuite] + 14
12 SenTestingKit 0x201057a3 +[SenTestProbe specifiedTestSuite] + 106
13 SenTestingKit 0x20105d83 +[SenTestProbe runTests:] + 94
14 Foundation 0x349c7e8d __NSFireDelayedPerform + 368
15 CoreFoundation 0x3084e7fb __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 14
16 CoreFoundation 0x3084e2ad __CFRunLoopDoTimer + 860
17 CoreFoundation 0x3081f7a5 __CFRunLoopRun + 1088
18 CoreFoundation 0x3081f277 CFRunLoopRunSpecific + 230
19 CoreFoundation 0x3081f17f CFRunLoopRunInMode + 58
20 GraphicsServices 0x31e445f3 GSEventRunModal + 114
21 GraphicsServices 0x31e4469f GSEventRun + 62
22 UIKit 0x31e51123 -[UIApplication _run] + 402
23 UIKit 0x31e4f12f UIApplicationMain + 670
24 VCCTesting 0x000234ff main + 70
25 VCCTesting 0x00002538 start + 40
)
terminate called after throwing an instance of 'NSException'
Кто-нибудь знает, что может быть неправильно?
Спасибо за любую помощь,
Kristofer
P.S. Я разместил это на форумах разработчиков приложений, но еще не успел с ними: https://devforums.apple.com/message/333890
Ответы
Ответ 1
У вас есть NSZombieEnabled? У меня была эта проблема, когда NSZombieEnabled установил YES в моих аргументах для моей цели запуска unit test. Я пробовал все (очистка/выход из содержимого XCode/resting simulator).
Единственным решением до сих пор было отключить зомби в моем старте unit test
Ответ 2
Я думаю, что я только что понял, почему я тоже получаю эту ошибку - возможно, одно и то же происходит с вами:
У меня есть два продукта, один для внутреннего бета-тестирования (в комплекте с панелью предпочтений) и один для релиза магазина приложений. Обе цели продукта были настроены с тем же именем продукта (PRODUCT_NAME
в настройках сборки).
Это отлично работало в XCode 3.x, но XCode 4 как-то пытался создавать продукт магазина каждый раз, когда я создавал бета-продукт. Я думаю, что это связано с изменением того, где XCode помещает свои производные файлы. XCode 4 хранил бета-версию и хранилища на том же пути, поэтому, когда бета-продукт был создан, выходной файл магазина изменился и его необходимо было перестроить...
В любом случае... изменение бета-версии продукта фиксировало временно устранило проблему... Я также изменил идентификатор пакета в Info.plist, чтобы два продукта имели разные идентификаторы. Теперь, когда я создаю один продукт, другой не получается построить одновременно, но я все равно получаю сбой при выполнении тестов: - (
Теперь моя единственная идея - полностью воссоздать проект из свежих, копировать по настройкам и файлам, чтобы увидеть, что XCode 4 делает что-то другое. Это и регистрация инцидента с Apple...
Приветствия,
Адам
Ответ 3
Я еще не уверен на 100%, но, похоже, эта проблема может быть решена путем создания различной схемы для каждой тестовой цели.
У меня была эта ошибка много сегодня днем, но это не произошло некоторое время после того, как я создал отдельные схемы для разных тестовых целей.
Ответ 4
Просто для тех, кто может столкнуться с этой проблемой, например:
Загружен KIFTester
Ошибка утверждения в - [SenTestClassEnumerator init],/SourceCache/OCUnit/OCUnit-5315/SourceCode/SenTestingKit/SenTestClassEnumerator.m:136
Завершение приложения из-за неотображенного исключения "NSInternalInconsistencyException", причина: "objc_getClassList возвратил больше классов, чем должен был."
Проблема оказалась в GoogleAnalytics 3.0
Обновлено до 3.0.3, но по-прежнему такая же проблема с любой из этих библиотек
libGoogleAnalytics_debug.a
libGoogleAnalyticsServices.a
Чтобы обойти это, я просто не включаю их для тестирования.