Xcode 4.5 pruebas unitarias de línea de comandos


Tener un problema desde la actualización a Xcode 4.5 al ejecutar mis pruebas unitarias a través de la línea de comandos. La siguiente es la salida que estoy viendo cuando intento ejecutar mis pruebas

Unknown Device Type. Using UIUserInterfaceIdiomPad based on screen size
Terminating since there is no workspace.
/Applications/Xcode.app/Contents/Developer/Tools/RunPlatformUnitTests.include:334: note: Passed tests for architecture 'i386' (GC OFF)

/Applications/Xcode.app/Contents/Developer/Tools/RunPlatformUnitTests.include:345: note: Completed tests for architectures 'i386'

A pesar de que dice que las pruebas han pasado y completado, no creo que realmente se han ejecutado.

Estoy usando el siguiente comando para ejecutar las pruebas xcodebuild-workspace MyApp.xcworkspace-scheme MyAppTests-sdk iphonesimulator - configuration Debug clean build TEST_AFTER_BUILD=YES

¿Alguien se ha encontrado con el mismo problema y puede ofrecer una solución?

Author: Josh Caswell, 2012-09-24

4 answers

Simplemente pensé que también debería compartir lo que hice para una solución a este problema. Seguí la solución descrita en https://stackoverflow.com/a/10823483/666943 pero convirtió el script ruby a shell. Al final básicamente instalé ios-sim a través de homebrew y reemplace el Run Script en el Build Phases de mi objetivo de prueba con lo siguiente:

if [ "$RUN_UNIT_TEST_WITH_IOS_SIM" = "YES" ]; then
    test_bundle_path="$BUILT_PRODUCTS_DIR/$PRODUCT_NAME.$WRAPPER_EXTENSION"
    ios-sim launch "$(dirname "$TEST_HOST")" --setenv DYLD_INSERT_LIBRARIES=/../../Library/PrivateFrameworks/IDEBundleInjection.framework/IDEBundleInjection --setenv XCInjectBundle="$test_bundle_path" --setenv XCInjectBundleInto="$TEST_HOST" --args -SenTest All "$test_bundle_path"
    echo "Finished running tests with ios-sim"
else
    "${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests"
fi

Para comenzar la prueba ahora paso el argumento RUN_UNIT_TEST_WITH_IOS_SIM=YES por ejemplo

xcodebuild -workspace MyApp.xcworkspace -scheme MyAppTests -sdk iphonesimulator -configuration Debug clean build RUN_UNIT_TEST_WITH_IOS_SIM=YES
 29
Author: Edward Huynh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:22:58

He notado este problema en las versiones beta de Xcode 4.5 / iOS 6. He estado trabajando en un corredor de pruebas unitarias independiente para solucionar este problema. Funciona compilando el paquete de pruebas unitarias y, a continuación, compilando una versión de la aplicación que ejecuta automáticamente las pruebas unitarias en un entorno de simulador.

La herramienta no está completa de ninguna manera, pero suficientes personas parecen estar teniendo este problema que estoy lanzando la herramienta como está por ahora. Por favor bifurcación o comentario para que pueda mejorar la herramienta.

Xcodetest: https://github.com/sgleadow/xcodetest

También mantenga un ojo en este radar en el problema http://openradar.appspot.com/12306879

 9
Author: Stew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-28 10:15:53

xcodebuild -project ${PROJECT_PATH}/${PROJECT_NAME}.xcodeproj \ -scheme ${TEST_SCHEME} \ -configuration Debug \ -sdk iphonesimulator5.1 \ clean build \ TEST_AFTER_BUILD=YES

Establecer el iphonesimulator a la versión 5.1 parece resolver el problema. Hay errores de radar llenos sobre este tema.

Este artículo también menciona una buena solución a seguir:

Http://baolei.tumblr.com/post/32428168156/ios-unit-test-from-command-line-ios6-xcode4-5

 6
Author: Victor Lima,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-29 20:36:49

También hay un pequeño truco que puede ayudar a ejecutar pruebas de línea de comandos en iOS6.0 simulator SDK

Estoy usando cedro y este ajuste me ayudó :

Primero, necesitas actualizar tu archivo main un poco:

  // Faking up that workspace port
  CFMessagePortCreateLocal(NULL, (CFStringRef) @"PurpleWorkspacePort", NULL, NULL,NULL);
  return UIApplicationMain(argc, argv, nil, @"CedarApplicationDelegate");

En segundo lugar, debe agregar una categoría a UIWindow:

@implementation UIWindow (Private)
- (void)_createContext {
   // Doing nothing here. Just for crash avoidance
}
@end

Cedar Unittest funcionará bien, con algunas advertencias de tiempo de ejecución, pero, al menos, podrán ejecutarse :)

 2
Author: tt.Kilew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-18 09:27:32