Pruebas unitarias de XCode 5: inicia mi aplicación

Cuando ejecuto mis pruebas en XCode 5, la ventana principal de mi aplicación OS X aparece en la pantalla durante un par de segundos mientras ejecuta las pruebas. ¿Por qué? Incluso si elimino todas las pruebas, todavía se abre mi ventana principal.

    Está ejecutando la prueba de la aplicación, no la prueba lógica. Esto significa que se iniciará una instancia de su aplicación y luego ejecutará las pruebas unitarias. Esto le permite realizar una prueba de integración que requiere que su aplicación se esté ejecutando.

    Aquí está la guía para configurar la prueba de aplicación y la prueba lógica.

    Si desea cambiarlo a prueba lógica (para que se ejecute más rápido y no necesite iniciar su aplicación primero):

    1. ve a la configuración de comstackción para tu objective de prueba de unidad
    2. búsqueda Bundle
    3. eliminar Bundle Loader y Test Host

    enter image description here

    Así es, debe eliminar “Bundle Loader” y “Test Host” de su configuración de comstackción.

    Pero debe agregar los archivos de implementación necesarios al objective de prueba de su unidad. Los archivos necesarios son los que desea usar en los casos de prueba de su unidad. Debe hacer esto porque en las pruebas lógicas XCode no comstackrá toda la aplicación. Por lo tanto, faltarán algunos de sus archivos.

    Este es un mensaje de error si ha dejado fuera un archivo:

     Undefined symbols for architecture i386: "_OBJC_CLASS_$_Module", referenced from: objc-class-ref in Lobic Network.o objc-class-ref in Logic_Unit.o ld: symbol(s) not found for architecture i386 clang: error: linker command failed with exit code 1 (use -v to see invocation) 

    Puede agregar los archivos faltantes seleccionando el archivo de implementación y mostrando el inspector de archivos. Habrá una sección llamada “Membresía objective” y allí puede establecer la membresía objective de los archivos para su prueba de unidad también.

    Con XCTest, los archivos de la aplicación NO necesitan ser incluidos dentro de los objectives XCTest. El paquete XCTest está vinculado a la aplicación que hace que esos archivos estén disponibles durante el tiempo de ejecución.

    Para que esto funcione, asegúrese de que la opción del comstackdor ” Símbolos ocultos por defecto ” esté configurada en NO dentro del objective de la aplicación.

    Aquí hay una publicación de blog con capturas de pantalla para mayor claridad: http://zmcartor.github.io/code/2014/02/24/slim-xctest-targets

    La ventaja de este enfoque es que el objective de prueba se construye mucho más rápido.

    En XCode 7, la eliminación de la Host Application no funciona para mí. De hecho, uso lo siguiente para evitar ejecuciones de aplicaciones.

    1. Argumentos de esquema de prueba de instalación enter image description here

    2. en main.m

       static bool isRunningTests() { NSDictionary* environment = [[NSProcessInfo processInfo] environment]; NSString* testEnabled = environment[@"TEST_ENABLED"]; return [testEnabled isEqualToString:@"YES"]; } 
    3. modificar main ()

       int main(int argc, char * argv[]) { @autoreleasepool { if (isRunningTests()) { return UIApplicationMain(argc, argv, nil, nil); } else { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } } } 

    Si las pruebas son para código que se puede ejecutar en computadoras de escritorio y dispositivos móviles, puede ejecutarlos sin un simulador o alojarlos dentro de su aplicación.

    El problema es que no puede usar el selector de esquema para su objective normal (computadora de escritorio o iOS) para ejecutar la prueba.

    Lo siguiente funcionó para mí en Xcode6.

     File > New Target... 

    Seleccione Cocoa Testing Bundle de la categoría OS X.

    enter image description here

    Asegúrese de seleccionar None en el menú desplegable de destino.

    Especifique un nuevo objetivo de prueba

    Haga clic en Finalizar. Agregue los archivos relevantes al nuevo objective como se describe arriba.

    Ahora crea un esquema para ejecutar la prueba.

    Haga clic en el selector de esquemas arriba a la derecha y elija New Scheme... , haga clic en el menú desplegable y navegue hacia abajo por la lista hasta el nuevo objective. Ahora puede elegir el esquema del selector de esquemas y usar ⌘U para ejecutar las pruebas.

    enter image description here

    Solo desperdicié una mañana en esto.

    El proyecto se creó en XCode 4 y se utilizó SenTesting.

    Probaron las pruebas de migración en XCode 5 / XCTTest

    Tenía el mismo problema: la aplicación se ejecutaba en el simulador y la prueba nunca se iniciaba después de probar todo (cambiar de la aplicación a las pruebas lógicas, cambiar a XCTest, eliminar SenTesting)

    renunció creó un proyecto limpio XCode 5.

    Agregué todos mis archivos y las pruebas funcionaron bien.

    Todavía puede haber problemas con Storyboard, ya que estos se crearon con XCode 4.

    Drástico pero funciona así que mantenlo como último recurso.

    En XCode5, la aplicación comienza. Esta respuesta muestra cómo cambiar su delegado al ejecutar pruebas unitarias para que se cierre de inmediato: https://stackoverflow.com/a/20588035/239408