2011-01-12 7 views
15

sto avendo alcuni problemi con la mia suite di test OCUnit, durante l'esecuzione di prove di applicazione (vale a dire sul dispositivo). Occasionalmente, ottengo un errore insidioso che sembra essere generato dalle classi OCUnit. Ho cercato di esaminare i file aggiunti alle suite di test, ma non riesco a capirlo.errori occasionali quando si esegue la suite di test applicazione OCUnit sul dispositivo

ho seguito la documentazione Apple e guardato altri tutorial quando si imposta i miei obiettivi di prova, con conseguente i seguenti obiettivi (e le dipendenze frastagliate):

LogicTests

MyApp LogicTests

ApplicationTests MiaApp

MyAppTesting ApplicationTests

L'ultima (MyAppTesting) è quello che ho eseguito sul dispositivo per avviare la suite di test.

E come accennato, i test non riescono a iniziare a volte mi lanciando il seguente output nella console:

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' 

Qualcuno sa cosa potrebbe essere sbagliato?

grato per qualsiasi aiuto, Kristofer

P.S. Ho postato questo sui forum di App Dev, ma non ho ancora avuto fortuna: https://devforums.apple.com/message/333890

+0

Basta colpire questo in qualche modo .. per me un pulito e poi riprovare ha funzionato. – canhazbits

risposta

19

ti hanno NSZombieEnabled? ho avuto questo problema quando avevo NSZombieEnabled impostata su Sì durante i miei argomenti per il mio bersaglio del lancio di prova. ho provato di tutto (pulizia/smettere XCode/res contenuto del simulatore di tting). L'unica soluzione finora era disabilitare zombie nel mio test di lancio dell'unità

+0

Disabilitare NSZombieEnabled ha funzionato per me! Grazie, alex! –

+0

Sì, ha funzionato anche per me – Antoni

+0

Ha funzionato anche per me. –

0

Penso di aver appena capito perché stavo ottenendo anche questo errore - forse la stessa cosa è accada a te:

ho due prodotti creati, uno per il beta testing interno (completo di un pannello di preferenze) e uno per il rilascio app store. Entrambi i target di prodotto sono stati impostati con lo stesso nome prodotto (PRODUCT_NAME nelle impostazioni di generazione).

questo ha funzionato bene in XCode 3.x, ma XCode 4 è stato in qualche modo cercando di costruire il prodotto negozio ogni volta che ho costruito il prodotto beta. Penso che questo sia dovuto al cambiamento di cui XCode mette i suoi file derivati ​​- XCode 4 è stato il magazzinaggio dei prodotti beta e conservare allo stesso percorso, in modo che quando il prodotto beta è stato costruito, il file di output negozio cambiato e aveva bisogno di essere ricostruito. ..

Comunque ... cambiando la versione beta Nome del prodotto ha fissato temporaneamente fissato il problema ... ho anche cambiato l'identificativo fascio in Info.plist in modo che i due prodotti hanno diversi identificativi. Ora quando costruisco un prodotto, l'altro non viene generato allo stesso tempo, ma continuo ad andare in crash quando i test sono eseguiti :-(

La mia unica idea ora è di ricreare totalmente il progetto da fresco, copiando attraverso le impostazioni ei file per vedere se XCode 4 fa qualcosa di diverso. questo, e la presentazione di una richiesta di supporto con Apple ...

Cheers,

Adam

+0

Grazie per la risposta, Adam! Sfortunatamente, questo non ha risolto il mio problema. Gli obiettivi hanno nomi di prodotto diversi ... Inoltre, ho avuto gli stessi problemi da XCode 3.2.4, quindi non penso che sia correlato alla versione XCode 4. :( –

+2

Ahimè, ho parlato troppo presto - sto ancora ricevendo l'errore, a volte scompare dopo aver pulito entrambi i target separatamente e poi costruito ed eseguito i test di unità da zero, ma a volte no ... I Sto registrando un incidente di supporto con Apple, quindi vedremo dove va! – adamcohenrose

+1

Hah! Archiviato un incidente di supporto ma mi è stato detto di sollevare un bug ... Lo farò quando ne avrò un momento. pulire tutti gli obiettivi spesso significa che posso eseguire il target desiderato senza i crash del test. – adamcohenrose

0

Non sono ancora sicuro al 100%, ma sembra che questo problema possa essere risolto creando uno schema diverso per ciascun target di test. Ho avuto questo errore molto questo pomeriggio ma non è successo per un po 'dopo aver creato schemi separati per diversi target di test.

0

Proprio per tutti coloro che potrebbero incorrere in questo problema come ho:

KIFTester caricato
fallimento asserzione in - [SenTestClassEnumerator init], /SourceCache/OCUnit/OCUnit-5315/SourceCode/SenTestingKit/SenTestClassEnumerator.m : 136
Terminare l'app a causa dell'eccezione non rilevata 'NSInternalInconsistencyException', motivo: 'objc_getClassList ha restituito più classi di quelle che dovrebbe avere.'

Il problema si è rivelata GoogleAnalytics 3,0 aggiornato alla 3.0.3, ma ancora lo stesso problema con una di queste librerie libGoogleAnalytics_debug.a libGoogleAnalyticsServices.a

per andare in giro è solo che non includo li per il test.

Problemi correlati