Случайные ошибки при запуске набора тестов приложений OCUnit на устройстве - PullRequest
15 голосов
/ 12 января 2011

У меня возникают некоторые проблемы с моим набором тестов 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

Ответы [ 4 ]

19 голосов
/ 19 мая 2011

У вас есть NSZombieEnabled?У меня была эта проблема, когда для NSZombieEnabled было установлено значение YES в качестве аргументов для цели запуска модульного теста.Я перепробовал все (чистка / выход из XCode / отдых на симуляторе).Пока единственным решением было отключить зомби при запуске моего юнит-теста

0 голосов
/ 15 января 2014

Просто для тех, кто может столкнуться с этой проблемой, как у меня:

Загружен 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

Чтобы обойти это, я просто не включаю их для тестирования.

0 голосов
/ 10 ноября 2011

Я еще не уверен на 100%, но, похоже, эту проблему можно решить, создав различные схемы для каждой цели теста. Во второй половине дня я часто сталкивался с этой ошибкой, но ее не было некоторое время после того, как я создал отдельные схемы для разных целей тестирования.

0 голосов
/ 04 апреля 2011

Думаю, я только что выяснил, почему я получаю эту ошибку - возможно, с вами происходит то же самое:

У меня настроено два продукта, один для внутреннего бета-тестирования (завершенос панелью настроек) и один для выпуска магазина приложений.Обе цели продукта были настроены с одинаковым именем продукта (PRODUCT_NAME в настройках сборки).

Это нормально работало в XCode 3.x, но XCode 4 каким-то образом пытался создать продукт магазина каждый раз, когда я собиралбета-продукт.Я думаю, что это связано с изменением того, где XCode размещает свои производные файлы - XCode 4 хранил бета-версию и сохранял продукты по одному и тому же пути, поэтому, когда бета-версия продукта была собрана, выходной файл хранилища изменился и его необходимо было восстановить...

В любом случае ... изменение бета-версии продукта исправило временно исправленную проблему ... Я также изменил идентификатор пакета в Info.plist, поэтому два продукта имеют разные идентификаторы.Теперь, когда я создаю один продукт, другой не создается одновременно, но я все равно получаю сбой при запуске тестов: - (

Моя единственная идея сейчас - полностью воссоздать проект из свежихкопирование настроек и файлов, чтобы увидеть, что XCode 4 делает что-то другое. Это и подача инцидента в службу поддержки Apple ...

Cheers,

Adam

...