2011-12-04 14 views
6

Al utilizar NSHomeDirectory() dentro de una unidad de prueba me sale:NSHomeDirectory en la unidad de prueba de iPhone

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

Yo esperaba que el directorio de inicio real de la aplicación actual. Algo como:

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

¿Qué estoy haciendo mal?

Respuesta

5

Para solucionar este problema, establezca el valor del paquete cargador dentro de los valores de creación de destino de prueba de unidad a:

$(BUILT_PRODUCTS_DIR)/MyAppName.app/MyAppName

y también su anfitrión de prueba a:

$(BUNDLE_LOADER)

usted debe luego encuentra NSHomeDirectory() devuelve el valor correcto.

+0

Esto parece preferible a las otras soluciones. Mucho más cerca de simulación de lo que está pasando. Funciona igual de bien en el simulador y el dispositivo. – lyricsboy

+1

es éste el defecto ahora? En un nuevo proyecto en XCode creado con pruebas de unidades el ajuste "Bundle Loader" del objetivo UT coincide con el anterior. – Parrots

+0

Sí, ahora está predeterminado. –

0

en un dispositivo iOS se debe utilizar

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

Por desgracia, mientras que en una unidad de prueba (o prueba de la lógica) - usted no está realmente "en su aplicación" (es decir, su caja de arena). Es por eso que cosas como NSDocumentDirectory o [NSBundle mainBundle] no funcionarán.

Si funciona para usted, que acababa de seguir adelante y crear una carpeta "Documentos" en

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

Es posible que desee hacer esto en la configuración de la prueba, de esa manera se puede eliminar en tearDown .

Si eso no funciona porque las pruebas dependen de cosas que ya están en NSDocumentDirectory de su aplicación, es posible que desee volver a pensar su prueba un poco, ya que todas deben ser independientes (es decir, instalar todos los recursos de su paquete en setUp)

También podría usar NSLibraryDirectory en lugar de NSDocumentDirectory, dependiendo de qué es lo que desea probar.

1

Si desea personalizado su destino de prueba a prueba de aplicación se debe añadir params mencionados por Andrew Ebling:

$(BUILT_PRODUCTS_DIR)/MyAppName.app/MyAppName 

y también su anfitrión de prueba a:

$(BUNDLE_LOADER) 

Si no tiene este parámetro, significa que sus pruebas son lógicas. Pero si agrega este parámetro, cambia las pruebas a las pruebas de la aplicación y observa que AppDelegate comenzará, ¿ejecutó las pruebas?

ver link para obtener más información.

Así que usted puede utilizar NSHomeDirectory (para las pruebas de aplicación solamente.