5

セットアップ:
Xcode 4.5.2(4G2008a)
OS X 10.7.5


Application通常のiOSターゲットを使用したXcodeプロジェクトがあります。Appleのドキュメントに記載されApplicationTestsているように、単体テストバンドル(バンドルではないLogicTests)を追加しようとしています。

ドキュメントに記載されている手順を注意深く実行し、すべてを数回再確認しました。ただし、ApplicationTestsターゲットをビルドできません...アプリケーションのクラスの1つにリンクしようとすると、リンカーエラーで失敗します。ターゲットのBundle Loaderビルド設定がApplicationTests機能しなかったようです。しかし、AFAICT、Appleのドキュメントで説明されているように、私はこれを正しく設定しました。


再現するための私のステップ:

  1. ApplicationTestsバンドルの設定については、Appleのドキュメントに従ってください。
  2. ApplicationTestsターゲットからクラスをインポートして実行するユニットテストメソッドをターゲットに記述しますApplication(例MyAppClass)。
  3. スキームポップアップでアプリケーションターゲットを選択し、実行先ポップアップでiPhone6.0シミュレーターを選択します
  4. Product>>Test

期待:
シミュレーターが起動し、ApplicationTests実行する必要があります。

実際:ターゲットは次
ApplicationTestsエラーでビルドに失敗します:

Undefined symbols for architecture i386:
  "_OBJC_CLASS_$_MyAppClass", referenced from:
      objc-class-ref in ApplicationTests.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

MyAppClass単体テストでへの参照を削除すると、ApplicationTestsバンドルが正常にビルドおよび実行されます。

繰り返しになりBundle Loaderますが、ターゲットでビルド設定を適切に設定していないようですがApplicationTests、再確認したところ、Appleの指示に正しく従っていたようです。

ApplicationTestsターゲットがターゲット内のシンボルにリンクできないようにするために、何を間違えた可能性がありApplicationますか?


更新Application:およびApplicationTestsターゲットを使用して、新しいダミープロジェクトを最初から作成しようとしました。ダミープロジェクトではMyAppClass、ターゲットにクラスを追加し、それにリンクして、ダミーターゲットでApplicationを使用する単体テストを正常に実行できます。MyAppClassApplicationTests

したがって、ダミープロジェクトのアプリケーションテストは機能します。しかし、それらは私の実際のプロジェクトでは機能しません。ダミープロジェクトと実際のプロジェクトのターゲットを比較しましたが、実際のプロジェクトでのみこの問題を引き起こすような大きな違いは見つかりませんでした。

私の実際のプロジェクトはかなり古いです(しかし、非常に複雑なので、最初からやり直すのは非常に難しいでしょう)。プロジェクトの古さのために、この比較的新しい機能が機能しなくなっているのではないでしょうか。

実際のプロジェクトのターゲットの1つでビルド設定の問題が発生しているように見えます。しかし、私はそれを見つけることができません。

4

2 に答える 2

2

プロジェクトを Xcode 5.0 で開いてみることはできますか? プロジェクト/ターゲット設定で単体テスト ターゲットを選択し、[全般] タブを開き、選択した [ターゲット] がメインのアプリ ターゲットかどうかを確認します。

ここで、Xcode がユニット テスト バンドル ローダーにリンクする情報を取得します。

于 2014-02-20T10:45:54.190 に答える
2

関連する質問: 静的ライブラリを使用した単体テスト

要約すると、SenTest または XCTest の使用に関係なく、次のことを確認する必要があります。

  • メイン プロジェクトは、テスト ターゲットの依存関係として設定されます

  • メイン ターゲットが静的ライブラリの場合、メイン ターゲットのライブラリ製品をテスト ターゲットのlink with binary librariesビルド フェーズに含める必要があります。

これらのいずれか (または両方) がないと、このエラーが発生する可能性があります。

于 2014-02-28T00:24:31.237 に答える