Xcode 4.5命令行unit testing
在通过命令行运行我的unit testing时更新到Xcode 4.5时遇到问题。 以下是当我尝试运行testing时看到的输出
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'
即使它说testing已经通过并完成了,我不认为它们已经被运行了。
我正在使用以下命令来运行testingxcodebuild -workspace MyApp.xcworkspace -scheme MyAppTests -sdk iphonesimulator -configurationdebugging干净构buildTEST_AFTER_BUILD = YES
有没有人遇到同样的问题,可以提供解决scheme?
只是觉得我也应该分享我为解决这个问题所做的。 我遵循https://stackoverflow.com/a/10823483/666943中概述的解决scheme,但将ruby脚本转换为shell。; 最后,我基本上通过自制软件安装了ios-sim
,并用我的testing目标的Build Phases
replace了下面的Run Script
:
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
现在开始testing,我传递参数RUN_UNIT_TEST_WITH_IOS_SIM=YES
例如
xcodebuild -workspace MyApp.xcworkspace -scheme MyAppTests -sdk iphonesimulator -configuration Debug clean build RUN_UNIT_TEST_WITH_IOS_SIM=YES
我在Xcode 4.5 / iOS 6的testing版中注意到了这个问题。我一直在研究一个独立的unit testing运行器来解决这个问题。 它通过编译你的unit testing包,然后编译你的应用程序的一个版本,在模拟器环境中自动运行unit testing。
这个工具并不完整,但是现在似乎有足够多的人正在解决这个问题。 请叉或评论,所以我可以改进工具。
xcodetest: https : //github.com/sgleadow/xcodetest
xcodebuild -project ${PROJECT_PATH}/${PROJECT_NAME}.xcodeproj \ -scheme ${TEST_SCHEME} \ -configuration Debug \ -sdk iphonesimulator5.1 \ clean build \ TEST_AFTER_BUILD=YES
将iphonesimulator设置为5.1版似乎解决了这个问题。 在这个问题上有雷达错误。
本文还提到了一个很好的解决scheme:
http://baolei.tumblr.com/post/32428168156/ios-unit-test-from-command-line-ios6-xcode4-5
此外,还有一点可以帮助在iOS6.0模拟器SDK上运行命令行testing
我使用雪松和这个调整帮助我:
首先,你需要稍微更新你的主文件:
// Faking up that workspace port CFMessagePortCreateLocal(NULL, (CFStringRef) @"PurpleWorkspacePort", NULL, NULL,NULL); return UIApplicationMain(argc, argv, nil, @"CedarApplicationDelegate");
其次,您需要将类别添加到UIWindow:
@implementation UIWindow (Private) - (void)_createContext { // Doing nothing here. Just for crash avoidance } @end
雪松Unittest将运行良好,有一些运行时警告,但至less他们将能够运行:)