テスト ケースで初めて OCMock を使用しようとしています。これは、Xcode 4.3 で構築され、Lion をターゲットとする Mac プロジェクトです。メイン アプリとテスト バンドルの両方で ARC がオンになっているため、テストを実行するたびに次のログ メッセージが表示されます。
GC: forcing GC OFF because OBJC_DISABLE_GC is set
私は ARC を使用しているので、GC は気にしません。OCMock の最新の安定版リリース (2.0.1) にリンクされた単体テストをビルドすると、ビルドに問題はありません。実行時に、上記のログ ステートメントの後、次のようになります。
The test bundle at /Users/___/Library/Developer/Xcode/DerivedData/___-ayizwpehemunvodsdvczckkvarsh/Build/Products/Debug/___Tests.octest could not be loaded because its Objective-C runtime information does not match the runtime information required by the test rig. This is likely because the test rig is being run with Objective-C garbage collection disabled, but the test bundle requires Objective-C garbage collection. To enable Objective-C garbage collection for the test rig, run it in an environment without the OBJC_DISABLE_GC environment variable.
2012-03-06 10:29:32.812 otest[8486:203] *** NSTask: Task create for path '/Users/___/Library/Developer/Xcode/DerivedData/___-ayizwpehemunvodsdvczckkvarsh/Build/Products/Debug/___Tests.octest/Contents/MacOS/___Tests' failed: 22, "Invalid argument". Terminating temporary process.
このメッセージは、ガベージ コレクションが最も一般的な原因であることを示していますが、前述のとおり、GC を使用する方法はありません。では、実行時に私を台無しにする可能性のある他の設定は何ですか? 私は自分が異常なことをしているとは思いませんでした。テスト プロジェクトの設定を確認しましたが、奇妙なことは何もありませんでした。
アップデート
これを新しい空のプロジェクトで再現できました。
- 新しいプロジェクトを作成し、ARC を有効にして単体テストを作成する
Test Host
単体テスト バンドルのビルド設定から設定をクリアする- OCMock フレームワークへのリンク
- テストを実行し、上で報告したのと同じエラーを目撃します
また、ARC をオフにしてガベージ コレクションをRequiredにclang
すると、mach-o リンカ エラーが報告されるため、ビルドが成功しません。OCMock フレームワークへのリンクを削除すると、正常にビルドされます。これは、ガベージ コレクション以外に問題があるという私の最初の考えを裏付けるものです。