54

背景:

unitTests を実行するようにターゲットが構成された iOS アプリケーションがあります。また、MacBook でビルド自動化ツール jenkins を実行しています。これにより、このアプリケーションが自動的にビルドされ、すべてのテストが実行されます (コマンド ライン xcodebuild ツールを使用)。

Xcode 4 ではすべてが正常に機能しました。このビルド自動化ツールは別のユーザーで実行され、これらすべてのテストが実行されていました。

最近 Xcode 5 に切り替えましたが、シミュレーターを起動できないため、失敗し始めました。

問題

テスト(ロジックテスト)を実行するように構成されたスキーム UnitTests があります。AI は、次の 2 つの方法のいずれかを使用してこれらのテストを実行します。

  • Xcode でコマンド U

  • またはコマンドライン "/usr/bin/xcodebuild -scheme UnitTests -sdk iphonesimulator -configuration Release clean build TEST_AFTER_BUILD=YES "

どちらの場合も、シミュレータを起動しようとします。ただし、私の理解では、それは必要ありません。とにかく、x86上で動作し、シミュレーターにアプリがインストールされているようには見えません。

この厄介なシミュレーターの開始を取り除く方法はありますか (ビルドの自動化が中断されるため)。

更新 1

非常によく似た質問を見つけたようですが、うまくいきません: Run logic tests in Xcode 4 without launching the simulator

更新 2

非常に関連性が高く興味深い質問/回答を見つけました: Apple CI / Xcode Service and Jenkins

4

6 に答える 6

22

iOS 単体テストの代わりに Mac OSX 単体テストを作成できます。ただし、これには、単体テストに iOS 固有のライブラリを含めないことが必要です。これは、次の方法で実行できます。

  1. プロジェクトを選択 -> ターゲット ドロップダウン -> [ターゲットを追加...]
  2. 「Mac OSX」→「その他」→「Cocoa Unit Testing Bundle」を選択
  3. 通常のプロジェクトと同じようにテスト バンドルを作成します。

単体テストにソースを追加して、シミュレーターを起動せずに iOS テストのように実行できるようになりました。

于 2013-11-07T13:17:25.007 に答える
14

私はアップルのエンジニアに同じ質問をしました。残念ながら、これを達成しながら同時に iOS を使い続けることはできないようです。テストするかどうかを確認するためにできるいくつかのトリックがあります。このコード スニペットを AppDelegate.h またはその他のグローバル クラスに配置して、ルート ビュー コントローラーをロードせず、wierdo ui が単体テストを破損するのを防ぐことができます。

static BOOL isTesting() {
    BOOL isTesting = !isEmpty([[[NSProcessInfo processInfo] environment] objectForKey:@"XCInjectBundle"]);
    return isTesting;
}

また、Apple のエンジニアに、これが正当なチェックであることを確認してもらいました。そして、クレジットが必要な場所でクレジットを与えるために、これは次のとおりです。iOSプロジェクトで現在のターゲットをプログラムで決定します(実行またはテスト)

編集: 私もこれで成功しましたが、もう少し簡単です:

static BOOL isTesting() {
    return [[[NSProcessInfo processInfo] processName] isEqualToString:@"xctest"];
}
于 2013-11-12T17:44:47.107 に答える