2

単体テストを自動化できるように、コマンド ラインから単体テストを実行する方法を見つけようとしています。私は XCode 4.5.2 を使用しており、IOS アプリケーションを構築しています。

最初にこれを使用してみました:

xcodebuild  -target "Unit Tests" -configuration "Debug (test syncserver)" -sdk iphonesimulator6.0 clean build TEST_AFTER_BUILD=YES

これでコンパイルは実行されますが、テストは実行されませんでした。したがって、ここで他のソリューションを読んだ後、ios-sim をインストールし、後でこのスクリプトを実行するようにターゲットをセットアップしました。ビルドします。)

#!/bin/bash

if [ "$RUN_UNIT_TEST_WITH_IOS_SIM" = "YES" ]; then
    test_bundle_path="$BUILT_PRODUCTS_DIR/$PRODUCT_NAME.$WRAPPER_EXTENSION"
    echo ios-sim launch "$(dirname "$CODESIGNING_FOLDER_PATH")" --setenv DYLD_INSERT_LIBRARIES=/../../Library/PrivateFrameworks/IDEBundleInjection.framework/IDEBundleInjection --setenv XCInjectBundle="$test_bundle_path" --setenv XCInjectBundleInto="$CODESIGNING_FOLDER_PATH" --args -SenTest All "$test_bundle_path"
    ios-sim launch "$(dirname "$CODESIGNING_FOLDER_PATH")" --setenv DYLD_INSERT_LIBRARIES=/../../Library/PrivateFrameworks/IDEBundleInjection.framework/IDEBundleInjection --setenv XCInjectBundle="$test_bundle_path" --setenv XCInjectBundleInto="$CODESIGNING_FOLDER_PATH" --args -SenTest All "$test_bundle_path"
    echo "Finished running tests with ios-sim"
else
    "${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests"
fi

ここで、以前と同じ xcodebuild コマンドを実行すると、次のようになります。

エラー Domain=DTiPhoneSimulatorErrorDomain Code=1 「不明なエラーです。」UserInfo=0x7fcf04b03190 {NSLocalizedDescription=不明なエラー、DTiPhoneSimulatorUnderlyingErrorCodeKey=-1} ios-sim でのテストの実行が終了しました

次に何を試すかについて何か提案はありますか?

4

2 に答える 2

3

ログから、いくつかの設定が間違っているようです。正しい構文は次のとおりです。

ios-sim launch YourApp.app 
--setenv DYLD_INSERT_LIBRARIES=/../../Library/PrivateFrameworks/IDEBundleInjection.framework/IDEBundleInjection 
--setenv XCInjectBundle=YourTest.octest 
--setenv XCInjectBundleInto=YourApp.app/YourApp 
--args -SenTest All YourTest.octest

あなたはそれを見ることができました

  1. 起動コマンドの後にアプリのパスが正しくありません
  2. XCInjectBundle は、アプリではなく octest にする必要があります
  3. XCInjectBundleInto は、アプリ フォルダーではなく、アプリのバイナリ パスにする必要があります。
  4. 最後の引数も octest にする必要があります

環境変数に TEST_HOST が表示されない場合は、それらを調べて、bash スクリプトを正しくするための適切なものを見つけることができます。

于 2013-04-03T08:16:38.787 に答える
0

少し古い質問です..しかし、私はここでいくつかの同様の質問に陥ります。

OSX / iOS(iOS13 / Catalina / Xcode 11でテスト済み)の私の2セント。(それが誰かを助けることができることを願っています..)

func underXCTest()->Bool{
    let environment = ProcessInfo.processInfo.environment
    if let _ = environment["XCInjectBundleInto"]{
        return true
    }
    return false
}

テスト中は false を返します。

于 2019-10-11T08:45:41.237 に答える