2010-05-05 15 views
15

Tengo un problema y quería confirmar que estoy haciendo las cosas correctamente.Xcode Unit Testing - ¿Cómo acceder a los recursos desde el paquete de la aplicación?

Puedo probar cosas simples con mis pruebas SenTestingKit, y eso funciona bien. Configuré un paquete de prueba de unidades y lo configuré como una dependencia del objetivo principal de la aplicación. Ejecuta con éxito todas las pruebas cada vez que presiono cmd + B.

Aquí es donde me encuentro con problemas. Tengo algunos archivos XML que necesito cargar desde la carpeta de recursos como parte de la aplicación. Como soy un buen probador de unidades, quiero escribir pruebas unitarias para asegurarse de que se están cargando correctamente.

Así que tienen un código que se parece a esto:

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

Esto funciona cuando se ejecuta la aplicación, pero durante una prueba de unidad, mainBundle apunta al paquete equivocado, por lo que esta línea de código devuelve nil.

así que lo cambié a utilizar una clase conocida como esto:

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

Esto no funciona bien, porque para que la prueba incluso a compilar el código como este, es Config necesita ser parte del objetivo de prueba de la unidad. Si agrego eso, entonces el paquete para esa clase se convierte en el paquete de Prueba de Unidad. (¡Uf!)

¿Me estoy acercando a esto de la manera incorrecta?

+0

Intenta construirlo y luego ejecuta las pruebas. Vi un video de iTunes U sobre esto y me dijeron que si el objetivo de la prueba no estaba configurado correctamente, se probaría en la última compilación cuando se ejecutara en lugar de construir y luego ejecutar las pruebas. ¿Ha comprobado para asegurarse de que no es el caso? – Tacoman667

+0

¿Intenta crear el proyecto de prueba de unidad? Parte del paquete de prueba de la unidad es ejecutar los scripts, por lo que lo configuro como una dependencia del objetivo de mi aplicación. CMD + B siempre debe ejecutar pruebas. –

Respuesta

20

Al intentar reproducir su problema, me di cuenta: ¿ha intentado simplemente agregar sus recursos a su paquete de prueba? ¿Eso le causaría algún problema? Hice exactamente eso, y funcionó muy bien para mí. Por ejemplo:

Código:

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

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

Salida:

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 

espero que esto ayude.

+0

¡Exactamente lo que necesitaba, gracias! –

+0

que es un bucle wee útil. ¡Gracias! –

0

Me encontré con este problema con Xcode 4 y mi problema era que tenía un proyecto antiguo de Xcode 3 y de alguna manera la información del objetivo de prueba había desaparecido. Agregué un nuevo UnitTests-Info.plist al proyecto y de repente pude recuperar recursos nuevamente.