Xcode 4.5命令行单元测试

问题描述 投票:36回答:4

自通过命令行运行单元测试时更新到Xcode 4.5以来存在问题。以下是我尝试运行测试时看到的输出

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'

尽管它确实说测试已经通过并完成,但我认为它们实际上并未运行。

我正在使用以下命令来运行测试:

xcodebuild -workspace MyApp.xcworkspace -scheme MyAppTests -sdk iphonesimulator -configuration Debug clean build TEST_AFTER_BUILD=YES

有人遇到相同的问题并且可以提供解决方案吗?

unit-testing ios6 xcodebuild xcode4.5
4个回答
29
投票

[以为我也应该分享我为解决此问题所做的工作。我遵循了https://stackoverflow.com/a/10823483/666943中概述的解决方案,但将ruby脚本转换为shell。最后,我基本上通过自制程序安装了ios-sim,并用以下内容替换了我的测试目标的Run Script中的Build Phases

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

现在要开始测试,我传入参数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

9
投票

[我在Xcode 4.5 / iOS 6的Beta版中注意到了这个问题。我一直在研究独立的单元测试运行程序来解决此问题。它可以通过编译单元测试包,然后编译可以在模拟器环境中自动运行单元测试的应用程序版本来工作。

该工具绝不是完整的,但是似乎有足够的人遇到了这个问题,我现在就发布该工具。请分叉或评论,以便我改进此工具。

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

也请密切注意http://openradar.appspot.com/12306879问题


6
投票

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

将iphonesimulator设置为5.1版似乎可以解决此问题。这个问题上有很多雷达漏洞。

本文还提到了一个很好的解决方案:

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


2
投票

还有一点小技巧可以帮助在iOS6.0模拟器SDK上运行命令行测试

我正在使用Cedar,此调整帮助了我:

首先,您需要稍微更新main文件:

  // 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

Cedar Unittest可以很好地运行,并带有一些运行时警告,但是至少它们可以运行:)

© www.soinside.com 2019 - 2024. All rights reserved.