2010-01-04 8 views
36

Así que he seguido this tutorial para configurar las pruebas de unidad en mi aplicación cuando me quedé un poco atascado.Pruebas de la unidad de implementación con el SDK de iPhone

En viñeta 8 en ese tutorial que muestra esta imagen, que es lo que debe esperar cuando construyo: alt text http://developer.apple.com/library/ios/documentation/Xcode/Conceptual/iphone_development/art/logic_test_failure_text_editor.jpg

Sin embargo esto no es lo que me pasa cuando construyo. Aparece este mensaje de error: Command /bin/sh failed with exit code 1, así como el mensaje de error que ha creado la prueba de unidad. Entonces, cuando amplío en el primer error me sale esto:

PhaseScriptExecution "Run Script" "build/3D Pool.build/Debug-iphonesimulator/LogicTests.build/Script-1A6BA6AE10F28F40008AC2A8.sh" 
cd "/Users/james/Desktop/FYP/3D Pool" 
setenv ACTION build 
setenv ALTERNATE_GROUP staff 
... 
setenv XCODE_VERSION_MAJOR 0300 
setenv XCODE_VERSION_MINOR 0320 
setenv YACC /Developer/usr/bin/yacc 
/bin/sh -c "\"/Users/james/Desktop/FYP/3D Pool/build/3D Pool.build/Debug-iphonesimulator/LogicTests.build/Script-1A6BA6AE10F28F40008AC2A8.sh\"" 

/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[12589]: GC: forcing GC OFF because OBJC_DISABLE_GC is set 
Test Suite '/Users/james/Desktop/FYP/3D Pool/build/Debug-iphonesimulator/LogicTests.octest(Tests)' started at 2010-01-04 21:05:06 +0000 
Test Suite 'LogicTests' started at 2010-01-04 21:05:06 +0000 
Test Case '-[LogicTests testFail]' started. 
/Users/james/Desktop/FYP/3D Pool/LogicTests.m:17: error: -[LogicTests testFail] : Must fail to succeed. 
Test Case '-[LogicTests testFail]' failed (0.000 seconds). 
Test Suite 'LogicTests' finished at 2010-01-04 21:05:06 +0000. 
Executed 1 test, with 1 failure (0 unexpected) in 0.000 (0.000) seconds 

Test Suite '/Users/james/Desktop/FYP/3D Pool/build/Debug-iphonesimulator/LogicTests.octest(Tests)' finished at 2010-01-04 21:05:06 +0000. 
Executed 1 test, with 1 failure (0 unexpected) in 0.000 (0.002) seconds 

/Developer/Tools/RunPlatformUnitTests.include:448: error: Failed tests for architecture 'i386' (GC OFF) 
/Developer/Tools/RunPlatformUnitTests.include:462: note: Completed tests for architectures 'i386' 
Command /bin/sh failed with exit code 1 

Ahora bien, esto es muy extraño, ya que se está ejecutando las pruebas (y tener éxito como se puede ver mi despido STFail) porque si añado una prueba diferente, que No recibo errores, por lo que las pruebas funcionan bien. ¿Pero por qué estoy obteniendo esta compilación extra fallar?

También debe tener en cuenta que al descargar soluciones/plantillas que deberían funcionar, recibo el mismo error. ¡Supongo que he configurado algo mal aquí pero acabo de seguir un tutorial 100% correctamente! ¡Si alguien pudiera ayudar, estaría muy agradecido!

Gracias

EDIT: Según this blog, this post y algunos otros sitios web, no soy el único que conseguir este problema. Ha sido así desde el lanzamiento de xCode 3.2, suponiendo que los documentos y tutoriales del centro de desarrollo de Apple, etc. también son anteriores a 3.2.

Sin embargo, algunos dicen que es un problema conocido, mientras que otros parecen pensar que esto fue intencional. Por mi parte, me gustaría tanto la consola extendida como los mensajes de código, y ciertamente no me gusta el error "Comando/bin/sh ..." y realmente creo que habrían documentado dicha actualización. Esperemos que se arregle pronto de todos modos.

ACTUALIZACIÓN: Aquí está la confirmación de que algo ha cambiado desde el lanzamiento de xCode 3.2.1.

Esta imagen: alt text http://ing0.co.uk/info/pics/unittest-xcode-3.2.1.png es de mi versión de prueba usando 3.2.1. Este es de una versión anterior (3.1.4): alt text http://ing0.co.uk/info/pics/unittest-xcode-3.1.4.png. (El proyecto para ambos no se modificó).

Editar: URL de imagen actualizadas.

+0

Tengo este mismo problema en 3.2.5 (Intel Core i3 de 64 bits, OSX 10.6.6) – Vamos

+0

¡Es bueno que lo recompense, pero no estoy tan seguro de que haya una respuesta! –

+0

C'est pas grave, parece que tengo pruebas funcionando. – Vamos

Respuesta

1

¿Ha intentado establecer la configuración de compilación en "Depurar" para el caso de prueba?

lo hice, como se muestra en http://nothing2fancy.com/2009/08/04/failed-tests-for-architecture-i386-gc-off/ y funcionó

+0

Gracias por la sugerencia, pero eso no es lo que está sucediendo en el mío. Las pruebas de la unidad están funcionando bien, es el mensaje que se supone que aparece en el código ha pasado de la versión más reciente de xcode, ahora aparecen en los resultados de compilación, pero no creo que esto sea así. ¿Qué versión de xcode estás usando? –

+0

Versión 3.2.2 Prelanzamiento. para que se pueda solucionar en el último –

+0

Posiblemente, todavía estoy en 3.2.1. Gracias por eso, obtendré el prelanzamiento actual y probaré eso. –

0

No sé que es una forma correcta o no, pero es un trabajo para mí.

en la pestaña General de información de casos de prueba, que añadir mi principal ejecutable de la aplicación objetivo como una dependencia directa.

Y no hay ningún error para 'i386' (GC OFF) ".

Buena suerte.

+0

Gracias por la entrada pero aún hace lo mismo :( –

0

Cuando cree sus primeras clases de casos de prueba, asegúrese de que el objetivo esté configurado en su objetivo UnitTest, no en su destino de la aplicación.

Si se olvida de hacer esto cuando se crea la clase, puede "Obtener información" en la clase existente y establecer el objetivo no ....

+0

Ha sido un mientras que desde que traté de hacerlo, ¡pero estoy seguro de que lo hice! –

0

OK, nunca jugué con pruebas unitarias en XCode (por supuesto, me gustó JUnit en los buenos viejos tiempos de Java). Entonces, es solo una prueba: ¿Qué compilador estás usando, GCC o LLVM? Quizás GCC sea la mejor opción para estar seguro.

¿Tiene el mismo comportamiento cuando se habilita "Crear arquitectura activa solamente" en la configuración del proyecto? Este modificador elimina los mensajes de error duplicados al compilar para armv6 y armv7, tal vez esté relacionado.

5

doble clic 'Ejecutar script' bajo 'objetivos'/'Su nombre de destino de la escritura' y escriba

 
# Run the unit tests in this test bundle. 
"${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests" 1> /tmp/RunUnitTests.out 

Básicamente lo que necesita para anexar

 
1> /tmp/RunUnitTests.out 

a lo que ya está ahí

+0

¡Parece un eslabón muerto, me temo! –

+0

Impresionante, esto lo arregló para mí (y esto me estaba volviendo loco ¡hasta ahora!) –

+0

Funciona también para mí, pero usé "1>/dev/null" en su lugar, ya que la salida en el archivo tmp no se verá de todos modos. – Frank

0

Por favor, eche un vistazo a la última sample de Apple. Al descargar el código hay un archivo Léame en el que su escrito claramente:

——————————————————————————————————————————————————————————————————————————————— 
Running Logic Tests 
To run the logic tests: 
1. Choose Project > Set Active Target > CalculatorTests. 
2. Choose Project > Set Active SDK > Simulator. 
3. Choose Build > Build. Xcode runs the test cases implemented in 
    the CalculatorTests.m file. 
4. Choose Build > Build Results to open the Build Results window, containing 
    the tests results. You may have to click the Show Transcript button (the 
    third button on the bottom-left corner of the build results list) to view 
    the build transcript. 

The logic-tests results look similar to this: 

    PhaseScriptExecution <project_directory>/build/iPhoneUnitTests.build/Debug-iphonesimulator/CalculatorTests.build/Script-17AA84010F99894F00167681.sh 
     cd <project_directory> 
     /bin/sh -c <project_directory>/build/iPhoneUnitTests.build/Debug-iphonesimulator/CalculatorTests.build/Script-17AA84010F99894F00167681.sh 
    /Developer/Tools/RunPlatformUnitTests.include:364: note: Started tests for architectures 'i386' 
    /Developer/Tools/RunPlatformUnitTests.include:371: note: Running tests for architecture 'i386' (GC OFF) 
    objc[1222]: GC: forcing GC OFF because OBJC_DISABLE_GC is set 
    objc[1222]: GC: forcing GC OFF because OBJC_DISABLE_GC is set 
    Test Suite '<project_directory>/build/Debug-iphonesimulator/CalculatorTests.octest(Tests)' started at 2009-05-19 16:55:28 -0700 
    Test Suite 'CalculatorTests' started at 2009-05-19 16:55:28 -0700 
    <time> otest[1222:80f] -[CalculatorTests testAddition] setUp 
    <time> otest[1222:80f] -[CalculatorTests testAddition] start 
    <time> otest[1222:80f] -[CalculatorTests testAddition] end 
    <time> otest[1222:80f] -[CalculatorTests testAddition] tearDown 
    Test Case '-[CalculatorTests testAddition]' passed (0.007 seconds). 
    <time> otest[1222:80f] -[CalculatorTests testDivision] setUp 
    <time> otest[1222:80f] -[CalculatorTests testDivision] start 
    <time> otest[1222:80f] -[CalculatorTests testDivision] end 
    <time> otest[1222:80f] -[CalculatorTests testDivision] tearDown 
    Test Case '-[CalculatorTests testDivision]' passed (0.003 seconds). 
    <time> otest[1222:80f] -[CalculatorTests testInputException] setUp 
    <time> otest[1222:80f] -[CalculatorTests testInputException] start 
    <time> otest[1222:80f] -[CalculatorTests testInputException] end 
    <time> otest[1222:80f] -[CalculatorTests testInputException] tearDown 
    ... 
    Test Case '-[CalculatorTests testSubtractionNegativeResult]' passed (0.002 seconds). 
    Test Suite 'CalculatorTests' finished at 2009-05-19 16:55:28 -0700. 
    Executed 6 tests, with 0 failures (0 unexpected) in 0.021 (0.022) seconds 

    Test Suite '<project_directory>/build/Debug-iphonesimulator/CalculatorTests.octest(Tests)' finished at 2009-05-19 16:55:28 -0700. 
    Executed 6 tests, with 0 failures (0 unexpected) in 0.021 (0.024) seconds 

    /Developer/Tools/RunPlatformUnitTests.include:388: note: Passed tests for architecture 'i386' (GC OFF) 
    /Developer/Tools/RunPlatformUnitTests.include:399: note: Completed tests for architectures 'i386' 


Remember that logic tests are executed as part of the build process to provide 
you with build errors for failed unit tests. Logic unit-test bundles are not 
intented to run in iPhone Simulator or a device. 

——————————————————————————————————————————————————————————————————————————————— 

por lo tanto hay algún cambio en el kit sentesting. No creo que valga la pena archivar un error.

+0

¡Tenga en cuenta que esta pregunta tiene más de un año! –

+0

@ ing0 lo siento, no lo noté :(pero ¡Muchacho !, la recompensa es solo por 7 días, así es como contesté;) –

1

Menú: Proyecto -> Nueva fase de construcción -> Nueva RunScript fase de construcción -> Pegar lo siguiente en el área de texto vacío:

"${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests" 1> /tmp/RunUnitTests.out

Ahora trata de construir y que debe tener una error en las pruebas unitarias fallidas.

-4

Ese es el comportamiento esperado. La construcción fallará si una de las pruebas falla y la compilación tendrá éxito si pasan todas las pruebas.

+0

Es evidente que no has leído la publicación. Las pruebas de la unidad funcionan bien pero no se muestran como deberían. Echa un vistazo a las capturas de pantalla de la versión 3.2 en comparación con 3.1. –

Cuestiones relacionadas