2011-12-04 15 views
6

Quando si utilizza NSHomeDirectory() all'interno di una prova di unità ottengo:NSHomeDirectory in iPhone unit test

/Users/hgpc/Library/Application Support/iPhone Simulator/5.0 

mi aspettavo home directory effettiva dell'applicazione corrente. Qualcosa di simile:

/Users/hgpc/Library/Application Support/iPhone Simulator/5.0/Applications/6D1091C6-02AE-4803-A7DF-D623D0F89579 

Cosa sto facendo di sbagliato?

risposta

5

Per risolvere questo problema, impostare il valore di Bundle Loader entro l'unità impostazioni di generazione bersaglio prova a:

$(BUILT_PRODUCTS_DIR)/MyAppName.app/MyAppName

e anche il test Host a:

$(BUNDLE_LOADER)

si dovrebbe quindi trovare NSHomeDirectory() restituisce il giusto valore.

+0

Questo sembra preferito su altre soluzioni. Molto più vicino simulazione di quello che sta succedendo. Funziona altrettanto bene su simulatore e dispositivo. – lyricsboy

+1

È questo il default ora? In un nuovo progetto in XCode creato con unit test l'impostazione "Bundle Loader" del target UT corrisponde a quanto sopra. – Parrots

+0

Sì, è predefinito ora. –

0

su un dispositivo iOS si dovrebbe usare

NSArray *path = NSSearchPathForDirectoriesInDomains(
      NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentDirPath = [paths objectAtIndex:0]; 
3

Purtroppo, mentre in un'unità-test (o test di logica) - non sei veramente "nella tua app" (vale a dire la sua sandbox). Ecco perché cose come NSDocumentDirectory o [NSBundle mainBundle] non funzioneranno.

Se funziona per voi, mi basta andare avanti e creare una cartella "Documenti" in

/Users/hgpc/Library/Application Support/iPhone Simulator/5.0 

Si potrebbe desiderare di fare questo nel programma di installazione del tuo test, in questo modo è possibile eliminarlo in tearDown .

Se questo non funziona, perché i test dipendono da cose già essere nella NSDocumentDirectory della tua app, si potrebbe desiderare di ripensare il test un po ', come dovrebbero essere tutti autonomo (cioè installare tutte le risorse dal proprio bundle in setUp)

È inoltre possibile utilizzare NSLibraryDirectory anziché NSDocumentDirectory, a seconda di cosa testare.

1

Se vuoi per misura il vostro target di prova per testare applicazioni si dovrebbe aggiungere params menzionati da Andrew Ebling:

$(BUILT_PRODUCTS_DIR)/MyAppName.app/MyAppName 

e anche il test Host a:

$(BUNDLE_LOADER) 

Se non si dispone di questo parametro, significa che i test sono logici. Ma se si aggiungono questi parametri, si cambiano i test in Test delle applicazioni e si nota che l'avvio di AppDelegate ha eseguito test.

vedere link per ulteriori informazioni.

modo da poter utilizzare NSHomeDirectory (per le prove di applicazione solo.