36

通过命令行运行我的单元测试时更新到 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

有没有人遇到同样的问题并可以提供解决方案?

4

4 回答 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
于 2012-10-01T23:40:17.420 回答
9

我在 Xcode 4.5 / iOS 6 的 beta 版本中注意到了这个问题。我一直在开发一个独立的单元测试运行程序来解决这个问题。它的工作原理是编译您的单元测试包,然后编译您的应用程序版本,该版本在模拟器环境中自动运行单元测试。

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

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

还要密切关注这个问题http://openradar.appspot.com/12306879

于 2012-09-28T10:15:53.197 回答
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

于 2012-09-29T19:37:13.793 回答
2

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

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

首先,您需要稍微 更新一下主文件:

  // 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可以正常运行,但会出现一些运行时警告,但至少它们可以运行 :)

于 2013-01-18T09:27:32.177 回答