unit testing - Prueba de unidad de línea de comandos de Xcode 4.5
unit-testing ios6 (4)
Me di cuenta de este problema en las versiones beta de Xcode 4.5 / iOS 6. He estado trabajando en un corredor de pruebas de unidad independiente para solucionar este problema. Funciona mediante la compilación de su paquete de prueba de unidad, luego compila una versión de su aplicación que ejecuta automáticamente las pruebas de unidad en un entorno de simulador.
La herramienta de ninguna manera está completa, pero suficientes personas parecen tener este problema que estoy liberando la herramienta como es por ahora. Por favor bifurca o comenta para que pueda mejorar la herramienta.
xcodetest: https://github.com/sgleadow/xcodetest
También mantente atento a este radar sobre el problema http://openradar.appspot.com/12306879
Tener un problema desde que actualicé a Xcode 4.5 cuando ejecutaba mis pruebas unitarias a través de la línea de comandos. El siguiente es el resultado 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''
Aunque dice que las pruebas han pasado y se han completado, no creo que realmente se hayan ejecutado.
Estoy usando el siguiente comando para ejecutar las pruebas xcodebuild -workspace MyApp.xcworkspace -scheme MyAppTests -sdk iphonesimulator -configuration Depurar compilación limpia TEST_AFTER_BUILD = SÍ
¿Alguien ha tenido el mismo problema y puede ofrecer una solución?
Solo pensé que también debería compartir lo que hice para encontrar una solución a este problema. Seguí la solución descrita en https://.com/a/10823483/666943 pero convertí el script de ruby en shell. Al final, básicamente instalé ios-sim
través de homebrew y reemplazo el Run Script
en el objetivo Build Phases
of my Test 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
También hay poco truco que puede ayudar a ejecutar pruebas de línea de comandos en iOS6.0 simulador SDK
Estoy usando Cedro y este ajuste me ayudó:
Primero, necesitas actualizar un poco tu archivo principal :
// Faking up that workspace port
CFMessagePortCreateLocal(NULL, (CFStringRef) @"PurpleWorkspacePort", NULL, NULL,NULL);
return UIApplicationMain(argc, argv, nil, @"CedarApplicationDelegate");
En segundo lugar, debe agregar 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 :)
xcodebuild -project ${PROJECT_PATH}/${PROJECT_NAME}.xcodeproj / -scheme ${TEST_SCHEME} / -configuration Debug / -sdk iphonesimulator5.1 / clean build / TEST_AFTER_BUILD=YES
Establecer el iphonesimulator en la versión 5.1 parece resolver el problema. Hay errores de radar llenos sobre este problema.
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