コマンドラインでユニットテストを実行すると、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
誰かが同じ問題に遭遇し、解決策を提供できますか?
この問題の解決のために私がしたことも共有する必要があると思いました。 https://stackoverflow.com/a/10823483/66694 で概説されている解決策に従いましたが、Rubyスクリプトをシェルに変換しました。最後に、基本的にios-sim
をインストールしましたHomebrewを使用して、テストターゲットの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
Xcode 4.5/iOS 6のベータ版でこの問題に気づきました。この問題を回避するために、スタンドアロンの単体テストランナーに取り組んでいます。単体テストバンドルをコンパイルし、シミュレーター環境で単体テストを自動的に実行するバージョンのアプリをコンパイルすることで機能します。
このツールは決して完全なものではありませんが、十分な数の人がこの問題を抱えているようで、今のところこのツールをリリースしています。ツールを改善できるように、フォークまたはコメントしてください。
xcodetest: https://github.com/sgleadow/xcodetest
この問題についてもこのレーダーに注意してください http://openradar.appspot.com/12306879
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
また、iOS6.0シミュレータSDKでコマンドラインテストを実行するのに役立つ小さなハックもあります。
私は杉を使用していますが、この微調整は私を助けました:
まず、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 nittestはいくつかの実行時警告を伴って正常に実行されますが、少なくとも実行できます:)