iphone - tutorials - xcode unit tests
Implementación de pruebas unitarias con el iPhone SDK (9)
¿Has 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ó
Así que seguí este tutorial para configurar las pruebas unitarias en mi aplicación cuando me quedé un poco atascado.
En el punto 8 de ese tutorial se muestra esta imagen, que es lo que esperaba cuando construyo: texto alternativo 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 obtengo cuando construyo. Aparece este mensaje de error: Command /bin/sh failed with exit code 1
así como también con el mensaje de error que ha creado la prueba de unidad. Luego, cuando amplío el primer error, obtengo 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, esto es muy extraño ya que está ejecutando las pruebas (y tiene éxito como puede ver mi activación de STFail) porque si agrego una prueba diferente que aprueba no obtengo ningún error, por lo que las pruebas funcionan bien. ¿Pero por qué estoy obteniendo esta compilación extra fallar?
También cabe señalar que cuando descargo soluciones / plantillas que deberían resolverse, 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
EDITAR: De acuerdo con este blog , esta publicación y algunos otros sitios web, no soy el único que tiene 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í hay confirmación de que algo cambió desde el lanzamiento de xCode 3.2.1.
Esta imagen: texto alternativo http://ing0.co.uk/info/pics/unittest-xcode-3.2.1.png es de mi versión de prueba utilizando 3.2.1. Este es de una versión anterior (3.1.4): texto alternativo http://ing0.co.uk/info/pics/unittest-xcode-3.1.4.png . (El proyecto para ambos no se modificó).
Editar: URL de imagen actualizadas.
Cuando cree sus primeras clases de casos de prueba, asegúrese de que el objetivo esté establecido en su objetivo UnitTest, no en su objetivo de aplicación.
Si olvida hacer esto cuando crea la clase, puede "Obtener información" en la clase existente y establecer el destino allí ...
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.
Haga doble clic en ''Ejecutar script'' en ''Objetivos'' / ''Su nombre de destino del script'' y luego escriba
# Run the unit tests in this test bundle. "${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests" 1> /tmp/RunUnitTests.out
Básicamente necesitas anexar
1> /tmp/RunUnitTests.out
a lo que ya está allí
Intente comprobar este problema SenTestCase en Xcode 3.2 y errores de XCBuildLogCommandInvocationSection
la solución en esa pregunta funciona para mí.
Menú: Proyecto -> Nueva fase de compilación -> Nueva fase de compilación de RunScript -> Pegue lo siguiente en el área de texto vacía:
"${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests" 1> /tmp/RunUnitTests.out
Ahora intenta compilar y deberías obtener un error en las pruebas unitarias fallidas.
No sé de una manera correcta o no, pero es trabajo para mí.
En la pestaña General de la información Caso de prueba, agrego el destino ejecutable de mi aplicación principal como una dependencia directa.
Y no hay error para ''i386'' (GC OFF) ".
Buena suerte.
OK, nunca jugué con pruebas unitarias en XCode (por supuesto, me gustó JUnit en buenos 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.
Por favor, eche un vistazo a la última sample Apple. Cuando descargas el código, hay un archivo de lectura en el que está 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 de sentencias. No creo que valga la pena archivar un error.