web-dev-qa-db-ja.com

Xcode 4.5コマンドライン単体テスト

コマンドラインでユニットテストを実行すると、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

誰かが同じ問題に遭遇し、解決策を提供できますか?

36
Edward Huynh

この問題の解決のために私がしたことも共有する必要があると思いました。 https://stackoverflow.com/a/10823483/66694 で概説されている解決策に従いましたが、Rubyスクリプトをシェルに変換しました。最後に、基本的にios-simをインストールしましたHomebrewを使用して、テストターゲットのRun ScriptBuild 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
29
Edward Huynh

Xcode 4.5/iOS 6のベータ版でこの問題に気づきました。この問題を回避するために、スタンドアロンの単体テストランナーに取り組んでいます。単体テストバンドルをコンパイルし、シミュレーター環境で単体テストを自動的に実行するバージョンのアプリをコンパイルすることで機能します。

このツールは決して完全なものではありませんが、十分な数の人がこの問題を抱えているようで、今のところこのツールをリリースしています。ツールを改善できるように、フォークまたはコメントしてください。

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

この問題についてもこのレーダーに注意してください http://openradar.appspot.com/12306879

9
Stew

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

6
Victor Lima

また、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はいくつかの実行時警告を伴って正常に実行されますが、少なくとも実行できます:)

2
tt.Kilew