vez unitarias unit una test son realizan que pruebas los las ist integrados integración integracion función desventajas desarrolladores cuál componentes aquellas unit-testing xcode4 linker-errors ocunit

unit-testing - unitarias - son aquellas que se realizan una vez integrados sus componentes y las realizan los desarrolladores



Error de enlace al crear un objetivo de prueba de unidad (4)

Asegúrese de que el archivo fuente de FRRCategory haya sido agregado a sus fuentes de compilación para su objetivo de prueba de unidad.

Xcode 4:

Project Navigator -> "[Nombre del proyecto]" -> En Destinos, seleccione el objetivo de prueba de la unidad -> Fases de compilación -> Expandir fuentes de compilación -> Haga clic en + en la parte inferior de las fuentes de compilación y agregue el archivo fuente correcto.

Tengo un proyecto de XCode4 / iOS con un objetivo de prueba objetivo y unidad regular. Todo funciona bien, excepto cuando intento importar una de mis clases en mi clase de prueba y trato de usarla. Si intento construir el objetivo de la prueba unitaria, aparece el siguiente error de enlace:

Undefined symbols for architecture i386: "_OBJC_CLASS_$_FRRCategory", referenced from: objc-class-ref in CategoryTests.o ld: symbol(s) not found for architecture i386 collect2: ld returned 1 exit status

En CategoryTests.m estoy importando el archivo de encabezado de esta manera:

#import "../todoro/FRRCategory.h"

¿Qué estoy haciendo mal?


Otro problema que puedes tener es si la prueba de tu unidad usa funciones C (o similares) que no se usan en la aplicación real.

Esto puede estar restringido a tener un subproyecto. En mi caso

  • Aplicación
    • Subproyecto
      • Biblioteca de CA incrustada (es decir, archivos .c y .h compilados directamente en el interior)

La prueba de mi unidad usó algunas de las funciones C que no se usaron en ningún otro lado, y se eliminaron del archivo binario de la aplicación (NO del archivo .a del proyecto secundario).

La solución es

  1. desactive "Dead Code Stripping" para la compilación Debug de la aplicación. * y
  2. asegúrese de que las pruebas de su unidad utilicen Debug y no Release en la configuración del esquema.

(* no haga esto a las configuraciones de lanzamiento ya que inflará la aplicación con código que nunca se llama).


Sigue las instrucciones here . No requiere que agregue ningún archivo para compilar las fuentes.

La primera vez que eché de menos "Símbolos ocultos por defecto = NO" debería ser para su objetivo de la aplicación , no para el objetivo de la prueba.

Me funcionó de todos modos (tm).


Solo debe consultar una carpeta dentro de su importación si su archivo está dentro de un marco. De lo contrario, una vez que hayas agregado tu archivo al proyecto, simplemente haz #import "FRRCategory.h" . Bueno, a menos que haya hecho algo raro con sus Rutas de búsqueda de encabezado.