ACTUALIZACIÓN: terminé por renunciar y agregué GHUnit a mi proyecto en su lugar. Me puse en funcionamiento con GHUnit en cuestión de minutos.OCUnit probando un marco incrustado
ACTUALIZACIÓN: Se puede descargar el proyecto de Xcode aquí: http://github.com/d11wtq/Cioccolata
He añadido un blanco de ensayo Unidad a mi proyecto Xcode pero no logra encontrar mi marco cuando se acumula, diciendo:
Test.octest could not be loaded because a link error occurred. It is likely that dyld cannot locate a framework framework or library that the the test bundle was linked against, possibly because the framework or library had an incorrect install path at link time.
Mi marco (el objetivo principal del proyecto) está diseñado para ser incrustado y también tiene una ruta de instalación de @executable_path/../Frameworks
.
He marcado el marco como una dependencia directa del objetivo de prueba y lo he agregado a la fase de compilación "Enlace binario con bibliotecas".
Además he agregado un primer paso (después de que se ha creado la dependencia) de "Copiar archivos" que simplemente copia el marco en el directorio de Frameworks del conjunto de pruebas de unidades.
¿Alguien tiene alguna experiencia en esto? No estoy seguro de lo que me he perdido.
EDIT | Estoy bastante seguro de que no se debe, ya que un framework no es ejecutable, pero no he configurado "Test Host" y "Bundle Loader". Esto (en mi opinión) debería estar bien, ya que el paquete de prueba está vinculado al marco y lo cargará igual que cualquier otro paquete.
EDIT | Creo que estoy cerca. Leí el siguiente artículo que dicta el uso de @rpath en lugar de @executable_path.
http://www.dribin.org/dave/blog/archives/2009/11/15/rpath/
En este caso, tiene mucho sentido ya que el paquete de prueba OCUnit no es un archivo ejecutable, que es un paquete simple y llano, por lo @executable_path no es compatible. Así que ahora mi framework tiene su directorio de instalación establecido en @rpath
y el objetivo Test tiene sus rutas de búsqueda en tiempo de ejecución (rpath) definidas como el directorio de compilación. Esto me ahorra tener que copiar el marco en el paquete de prueba y significa que, en general, el marco resultante es mucho más flexible en naturaleza, ya que puede vivir en cualquier lugar.
Ahora, también me doy cuenta de que 0 debería haber configurado el Bundle Loader en el objetivo de prueba, por lo que ahora está configurado en la ruta del binario de estructura.
Puedo construir el objetivo de la prueba y puedo importar las clases del marco, sin errores. Pero tan pronto como trato de crear una instancia de una clase desde el marco me sale el siguiente error:
/Developer/Tools/RunPlatformUnitTests.include:412: note: Started tests for architectures 'i386' /Developer/Tools/RunPlatformUnitTests.include:419: note: Running tests for architecture 'i386' (GC OFF) objc[50676]: GC: forcing GC OFF because OBJC_DISABLE_GC is set Test Suite '/Users/chris/Projects/Mac/Cioccolata/build/Debug/Test.octest(Tests)' started at 2010-05-21 12:53:00 +1000 Test Suite 'CTRequestTest' started at 2010-05-21 12:53:00 +1000 Test Case '-[CTRequestTest testNothing]' started. /Developer/Tools/RunPlatformUnitTests.include: line 415: 50676 Bus error "${THIN_TEST_RIG}" "${OTHER_TEST_FLAGS}" "${TEST_BUNDLE_PATH}" /Developer/Tools/RunPlatformUnitTests.include:451: error: Test rig '/Developer/Tools/otest' exited abnormally with code 138 (it may have crashed). Command /bin/sh failed with exit code 1
Mi método de prueba no hace más que asignar y liberar posteriormente una clase HelloWorld he creado para ayudar a depurar esta configuración:
- (void)testNothing {
CTHelloWorld *h = [[CTHelloWorld alloc] init];
[h release];
}
Si puedo reemplazar estas líneas de código con una STAssertTrue(YES, @"Testing nothing");
el error desaparece, a pesar de que la clase sigue siendo importado.
¿De qué forma podría destripar su proyecto y publicarlo en línea? Estaría más que dispuesto a echar un vistazo rápido. Luché con un problema similar hace algún tiempo, pero no recuerdo exactamente lo que hice. Mirar un proyecto roto puede ayudar a sacudir mi cerebro. –
Lo estoy poniendo en github ahora ... se publicará en un tic. – d11wtq
No hay mucho en el camino del código secreto aquí. Apenas ha comenzado;) http://github.com/d11wtq/Cioccolata – d11wtq