2010-05-05 13 views
15

Mi sto imbattendo in un problema e volevo confermare che sto facendo le cose nel modo corretto.Test dell'unità Xcode - Accesso alle risorse dal pacchetto dell'applicazione?

Posso testare cose semplici con i miei test SenTestingKit, e va tutto bene. Ho creato un pacchetto unit test e lo ho impostato come dipendenza dal target principale dell'applicazione. Esegue correttamente tutti i test ogni volta che premo cmd + B.

Ecco dove mi imbatto in problemi. Ho alcuni file XML che devo caricare dalla cartella delle risorse come parte dell'applicazione. Essendo un buon tester di unità, voglio scrivere dei test unitari attorno a questo per assicurarmi che stiano caricando correttamente.

Così ho qualche codice che assomiglia a questo:

NSString *filePath = [[NSBundle mainBundle] 
    pathForResource:@"foo" ofType:@"xml"]; 

Questo funziona quando l'applicazione viene eseguita, ma durante un test di unità, mainBundle punti al fascio sbagliato, quindi questa riga di codice restituisce zero.

quindi l'ho cambiato fino ad utilizzare una classe nota come questo:

NSString *filePath = [[NSBundle bundleForClass:[Config class]] 
    pathForResource:@"foo" ofType:@"xml"]; 

Questo non funziona neanche, perché per il test di compilare anche il codice come questo, è Config deve essere parte del target di test unitario. Se aggiungo questo, il bundle per quella classe diventa il pacchetto Unit Test. (Ugh!)

Mi sto avvicinando a questo nel modo sbagliato?

+0

Provare a costruirlo e quindi eseguire i test. Ho visto un video di iTunes U su questo e hanno detto che se il target di test non è stato impostato correttamente, testerebbe l'ultima build durante l'esecuzione invece di costruire i test in esecuzione. Avete controllato per assicurarsi che non sia il caso? – Tacoman667

+0

Provate a costruire il progetto di test unitario? Parte del bundle di test delle unità consiste nell'eseguire gli script, quindi l'ho configurato come dipendenza dalla destinazione della mia applicazione. CMD + B dovrebbe sempre eseguire test. –

risposta

20

Durante il tentativo di riprodurre il problema, mi ha colpito: hai provato ad aggiungere le risorse al pacchetto di test? Ciò ti causerebbe problemi? L'ho fatto esattamente, e ha funzionato benissimo per me. Per esempio:

Codice:

- (void)testBundleLoading { 
    NSLog(@"Main Bundle Path: %@", [[NSBundle mainBundle] bundlePath]); 

    for (NSBundle *bundle in [NSBundle allBundles]) { 
    NSLog(@"%@: %@", [bundle bundleIdentifier], 
        [bundle pathForResource:@"fire" ofType:@"png"]); 
    } 
} 

uscita:

2010-05-05 14:31:05.961 otest[16970:903] Main Bundle Path: /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.1.3.sdk/Developer/usr/bin 
2010-05-05 14:31:05.962 otest[16970:903] (null): (null) 
2010-05-05 14:31:05.963 otest[16970:903] com.freetimestudios.KayakKingTests: /Volumes/FreeTime/KayakKing/build/Debug-iphonesimulator/KayakKingTests.octest/fire.png 

Spero che questo aiuta.

+0

Esattamente quello di cui avevo bisogno, grazie! –

+0

questo è un comodo loop wee. Grazie! –

0

Mi sono imbattuto in questo problema con Xcode 4 e il mio problema era che avevo un vecchio progetto Xcode 3 e in qualche modo l'info plist per il target di test era scomparso. Ho aggiunto un nuovo UnitTests-Info.plist al progetto e sono stato improvvisamente in grado di recuperare nuovamente le risorse.

Problemi correlati