2011-01-12 11 views
15

Mam pewne problemy z moim zestawem testów OCUnit, podczas uruchamiania testów aplikacji (tj. Na urządzeniu). Czasami pojawia się trudny błąd, który wydaje się być rzucany z klas OCUnit. Próbowałem przeglądać pliki dodane do zestawów testów, ale nie mogę się z tym pogodzić.Sporadyczne błędy podczas uruchamiania zestawu testów aplikacji OCUnit na urządzeniu

I już po dokumentacji Apple i spojrzał na innych tutoriali podczas konfigurowania moich celów testowych, w wyniku następujących celów (i wcięte zależnościami):

LogicTests

MojaApl LogicTests

ApplicationTests MojaApl

MyAppTesting ApplicationTests

Ostatni (MyAppTesting) to ten, który uruchamiam na urządzeniu, aby uruchomić zestaw testów.

jak wspomniano, badania mogły zostać uruchomione czasami rzuca mi następujący komunikat w konsoli:

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' 

Czy ktoś wie co może być nie tak?

wdzięczny za wszelką pomoc, Kristofer

PS: Opublikowalem to na forach deweloperów aplikacji, ale jeszcze nie miałem z tym szczęścia: https://devforums.apple.com/message/333890

+0

Po prostu uderz to jakoś .. dla mnie czysto, a potem spróbuj ponownie. – canhazbits

Odpowiedz

19

Czy masz NSZombieEnabled? miałem ten problem kiedy miałem NSZombieEnabled ustawioną na TAK w moich argumentach dla mojego celu uruchomienia testu urządzenia.) Próbowałem wszystkiego (czyszczenie/zakończenie XCode/res zawartość symulatora ttingu). Jedynym rozwiązaniem do tej pory było wyłączenie zombie w mojej jednostce testowej

+0

Wyłączenie NSZombieEnabled pracowało dla mnie! alex! –

+0

Tak, to działało również dla mnie – Antoni

+0

Pracowałem także dla mnie. –

0

Myślę, że właśnie odkryłem, dlaczego dostaję ten błąd - być może to samo jest się z tobą:

Mam dwa produkty skonfigurowane, jeden do wewnętrznego testowania wersji beta (wraz z panelem preferencji) i jeden do wydania sklepu z aplikacjami. Oba cele produktowe zostały skonfigurowane z tą samą nazwą produktu (PRODUCT_NAME w ustawieniach kompilacji).

To działało dobrze w XCode 3.x, ale XCode 4 starał się jakoś budować produkt sklepu za każdym razem, gdy budowałem produkt beta. Myślę, że jest to spowodowane zmianą, w której XCode umieszcza swoje pochodne pliki - XCode 4 przechowywał wersję beta i zapisywał produkty w tej samej ścieżce, więc kiedy produkt beta został zbudowany, plik wyjściowy sklepu zmieniono i trzeba go było przebudować. ..

Zresztą ... zmieniając beta Nazwa produktu ustaliła tymczasowo ustalony problem ... ja również zmienił identyfikator pakietu w Info.plist więc te dwa produkty mają różne identyfikatory. Teraz, gdy buduję jeden produkt, drugi nie jest budowany w tym samym czasie, ale nadal pojawia się awaria podczas testów :-(

Jedynym moim pomysłem jest teraz odtworzyć projekt ze świeżego, kopiowania całej ustawień i plików, aby zobaczyć czy XCode 4 robi coś innego. to i złożenie incydent pomocy z Apple ...

Wiwaty,

Adama

+0

Dzięki za odpowiedź, Adam! Niestety to nie rozwiązało mojego problemu. Cele mają różne nazwy produktów ... Miałem te same problemy od XCode 3.2.4, więc nie sądzę, że jest to związane z wersją XCode 4. :( –

+2

Niestety, mówiłem za wcześnie - wciąż dostaję błąd, czasami znika po wyczyszczeniu obu celów osobno, a następnie zbudować i uruchomić testy jednostkowe od zera, ale czasami to nie ... "Zgłaszam incydent wsparcia z Apple, więc zobaczymy, gdzie to jest!" – adamcohenrose

+1

Hah! Zgłoszono incydent wsparcia, ale kazano mi zgłosić błąd ... Zrobię to, gdy dostanę chwilę. czyszczenie wszystkich celów często oznacza, że ​​mogę uruchomić cel, którego chcę, nie powodując awarii testów – adamcohenrose

0

Nie jestem jeszcze w 100% pewien, ale wygląda na to, że problem można rozwiązać, tworząc inny schemat dla każdego celu testowego. Miałem ten błąd dużo po południu, ale nie stało się to przez jakiś czas po tym, jak stworzyłem osobne schematy dla różnych celów testowych.

0

Wystarczy dla każdego, kto może uruchomić w tej kwestii jak mam:

KIFTester ładowane
awarię potwierdzenie w - [SenTestClassEnumerator startowych] /SourceCache/OCUnit/OCUnit-5315/SourceCode/SenTestingKit/SenTestClassEnumerator.m : 136
Kończenie aplikacji z powodu nieprzechwyconego wyjątku "NSInternalInconsistencyException", powód: "objc_getClassList zwrócił więcej klas niż powinien."

Problemem okazał się Google Analytics 3,0 Aktualizacja do 3.0.3, ale nadal ten sam problem z jedną z tych bibliotek libGoogleAnalytics_debug.a libGoogleAnalyticsServices.a

Aby przejść wokół niego po prostu nie obejmują je do testów.