Intento utilizar OCMock por primera vez en mis casos de prueba. Es un proyecto Mac, integrado y dirigido a Lion, en Xcode 4.3. La aplicación principal y el paquete de pruebas tanto han ARC se activa, y por lo tanto cada vez que ejecuto las pruebas que veo el siguiente mensaje de registro:Error de OCMock en el tiempo de ejecución
GC: forcing GC OFF because OBJC_DISABLE_GC is set
Eso está bien, ya que estoy usando ARC por lo que don' No me importa GC. Cuando construyo mis pruebas unitarias, vinculadas con la última versión estable de OCMock (2.0.1), la compilación no tiene problemas. En tiempo de ejecución, después de la declaración de registro por encima, me sale el siguiente:
The test bundle at /Users/___/Library/Developer/Xcode/DerivedData/___-ayizwpehemunvodsdvczckkvarsh/Build/Products/Debug/___Tests.octest could not be loaded because its Objective-C runtime information does not match the runtime information required by the test rig. This is likely because the test rig is being run with Objective-C garbage collection disabled, but the test bundle requires Objective-C garbage collection. To enable Objective-C garbage collection for the test rig, run it in an environment without the OBJC_DISABLE_GC environment variable. 2012-03-06 10:29:32.812 otest[8486:203] *** NSTask: Task create for path '/Users/___/Library/Developer/Xcode/DerivedData/___-ayizwpehemunvodsdvczckkvarsh/Build/Products/Debug/___Tests.octest/Contents/MacOS/___Tests' failed: 22, "Invalid argument". Terminating temporary process.
El mensaje implica que la recolección de basura es la causa más común, pero como se ha mencionado, no hay manera de que estoy usando GC. Entonces, ¿qué otras configuraciones podrían estar arruinándome en tiempo de ejecución? No pensé que estuviera haciendo algo atípico, y revisé la configuración de mi proyecto de prueba para estar seguro, y no vi nada extraño.
actualización
que era capaz de reproducir esto con un nuevo proyecto vacío.
- Crear un nuevo proyecto y haga que la creación de pruebas unitarias, con ARC habilitado
- Borrar el ajuste
Test Host
de configuración de generación del lote de prueba de unidad - Enlace al marco OCMock
- Ejecutar las pruebas, y presenciar el mismo error informé anteriormente
Además, cuando apago CRA y la recolección de basura requerida, a continuación, clang
informa un error de enlazador mach-o, por lo que la compilación no tiene éxito. Si elimino el enlace al marco OCMock, se compila bien. Esto respalda mi pensamiento inicial de que el problema radica en otro lugar que no sea la recolección de basura.
Se dice que probablemente no está funcionando porque GC esta apagado. "el paquete de prueba requiere la recolección de basura Objective-C". Intente no configurar OBJC_DISABLE_GC. – vakio
@vakio el "paquete de prueba" es mi propio código de prueba, y usa ARC, que es la razón por la que GC está desactivado. Ese mensaje es solo una pista de lo que generalmente está mal en el entorno de tiempo de ejecución. Intenté habilitar GC, pero LLVM falla, probablemente porque ARC y GC no pueden coexistir. – Dov