unitarias unit test pruebas las ejemplo desventajas unit-testing xcode resources ocunit

unit-testing - test - pruebas unitarias python



iPhone-Recuperación de recursos para pruebas de unidades lógicas (3)

La traducción Swift 3 de la respuesta de Gary anterior (usando una URL en lugar de una ruta de cadena) es:

let url = Bundle(for: type(of: self)).url(forResource: "SimpleTestList", withExtension: "plist")

Observe el type(of: self) parte crítica y no obvia type(of: self) lugar de [self class] .

He estado siguiendo la documentación de Apple sobre cómo escribir pruebas unitarias para el iPhone y, de manera inmediata, la rutina no parece funcionar. No estoy seguro de entender dónde se va a obtener la referencia de la unidad de prueba al delegado de la solicitud.

Mis dependencias son como las siguientes: My_Program_target -> UnitTesting_target -> UnitTests_bundle

El siguiente fragmento de código es donde falla la afirmación. Estoy muy familiarizado con CPPUNIT, pero me cuesta entender cómo se cruza esto.

- (void) testAppDelegate { id yourApplicationDelegate = [[UIApplication sharedApplication] delegate]; STAssertNotNil(yourApplicationDelegate, @"UIAppliation failed to find the AppDelegate"); }

Adicionalmente:

He decidido en mi enfoque hacer una prueba de lógica. Estoy tratando de leer un archivo XML, pero no estoy teniendo la suerte de resolver el paquete, que me proporcionará la ruta por la que puedo acceder a mi archivo. He intentado pegar en la salida de ruta por allBundles, pero esa ruta tampoco parece funcionar. A continuación se muestra lo que estoy ejecutando en mi prueba (puede ver la declaración de depuración que estoy usando para generar las rutas de los paquetes):

NSLog(@"BundlePaths: %@", [NSBundle allBundles]); NSString * path = [[NSBundle bundleWithPath:@"$(TARGET_BUILD_DIR)"] pathForResource:@"SimpleTestList" ofType:@"plist"]; STAssertNotNil(path, @"Bundle Location couldn''t find the file specified");

Esencialmente, la afirmación en ruta no es exitosa, pero no estoy seguro de qué poner para que la ruta o el directorio hagan referencia al paquete unitTest que le dije para copiar los recursos del paquete. Llamar a [NSBundle mainBundle] tampoco funciona.


Ok, así que lo he descubierto. Para abrir un archivo en una prueba de unidad, deberá especificar el archivo que desea abrir como:

NSString * filePath = [[NSBundle bundleForClass:[self class] ] pathForResource:@"SimpleTestList" ofType:@"plist"];

Si incluye esto en una clase que está compilada como parte de su paquete de prueba de unidad, esa clase buscará dentro del paquete de prueba de unidad el archivo SimpleTestList.plist.

Para una prueba de unidad, solo asegúrese de configurar "Copiar los recursos del paquete" para incluir su lista en su paquete de prueba de la unidad.


Si necesita el delegado de la aplicación, debe ejecutar las pruebas unitarias en el propio dispositivo y no en el simulador. Además, verá que la salida de la prueba de la unidad aparece en la consola, no en los resultados de la compilación.

La clave a saber es que hay dos tipos de pruebas unitarias: las pruebas lógicas que se ejecutan fuera del ejecutable y, a continuación, integran los tipos de pruebas del sistema que necesitan el entorno de ejecución completo.

Las pruebas lógicas DEBEN ejecutarse con el simulador seleccionado como objetivo o no se ejecutarán.

Las pruebas integradas del sistema DEBEN ejecutarse como parte del archivo ejecutable, en el dispositivo. Querrá un nuevo objetivo para lograrlo.

Lo siento, esto es tan complejo, este aspecto es todavía un trabajo en progreso en comparación con muchos otros marcos de prueba de unidad.