16

注: 最近では、単体テストのセットアップがはるかに簡単になっています。このチュートリアルは、Xcode バージョン 5 以降にはあまり関係ありません。

かなり時間がかかりましたが、ようやく自分のプロジェクトで機能させることができました。「ロジック」テストを作成するために、ロジック テストの作成に関する Apple のガイドラインに従いました。ロジック テストがビルド中に実行されることを理解すれば、これは問題なく機能します。

これらのテストをデバッグできるようにするには、それらのテストを呼び出すカスタム実行可能ファイルを作成する必要があります。Grokking Cocoa ブログの Sean Miceliによる記事には、これを行うためのすべての情報が記載されています。ただし、それに従ってもすぐに成功するわけではなく、微調整が必​​要でした。

Sean のチュートリアルに示されている主な手順を説明し、理解するのに時間がかかった「ダミー用」の概要を説明します。

  1. 単体テストを含むターゲットをセットアップしますが、実行しません
  2. テストを実行するために otest 実行可能ファイルをセットアップします
  3. otest 環境変数をセットアップして、otest が単体テストを見つけられるようにします。

以下はXCode 3.2.5で実行されました

XCode 4 に関する注意

XCode 4 では、単体テストを直接デバッグできます。テストを作成し、テストの 1 つとしてターゲットに追加し、ブレークポイントを設定するだけです。それで全部です。もっと来ます。

ステップ 1 - ターゲットの設定

  1. プロジェクトのターゲットの下にある単体テストのターゲットを複製します。これにより、単体テスト製品 (.octest ファイル) の複製も作成されます。下図の「LogicTest」が本来のターゲットです。
  2. 単体テスト ターゲットと単体テスト プロダクト (.octest ファイル) の両方の名前を同じ名前に変更します。下図の「LogicTestsDebug」が重複対象です。
  3. 新しいターゲットの RunScript フェーズを削除します

両方の名前は何でもかまいませんが、スペースは避けます。

ここに画像の説明を入力

ステップ 2 - otest のセットアップ

ここで最も重要な点は、正しい otest を取得することです。つまり、デフォルトの Mac バージョンではなく、現在の iOS 用のものです。これは、ショーンのチュートリアルで詳しく説明されています。以下に、物事を正しく設定するのに役立ついくつかの詳細を示します。

  1. Project->New Custom Executable に移動します。これにより、実行可能ファイル名と実行可能ファイルのパスを入力するよう求めるウィンドウが開きます。
  2. 名前は何でも入力してください。
  3. iOS otest 実行可能ファイルへのパスをコピーして貼り付けます。私の場合、これは /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk/Developer/usr/bin/otest でした
  4. 入力を押します。これにより、実行可能ファイルの構成ページが表示されます。
  5. この時点で変更する唯一のことは、「パス タイプ: 現在の SDK に相対」を選択することです。パスは入力しないでください。これは手順 3 で入力したものです。 ここに画像の説明を入力

ステップ 3 - otest 引数と環境変数の設定

otest の引数は簡単に設定できます... しかし、これが私の最大の問題であることが判明しました。私は当初、自分のロジック テスト ターゲットに「LogicTests Debug」という名前を付けていました。この名前と「LogicTests Debug.octest」(引用符付き) を otest の引数として使用すると、otest は終了コード 1 で終了し、コードに停止することはありません...

解決策: ターゲット名にスペースを入れないでください!

otest の引数は次のとおりです。

  1. -SenTest Self (または All またはテスト名 - ターミナルで man otest と入力してリストを取得)
  2. {LogicTestsDebug}.octest - {LogicTestsDebug} はロジック テスト バンドル名に置き換える必要があります。

コピー/貼り付け用の環境変数のリストは次のとおりです。

  • DYLD_ROOT_PATH: $SDKROOT
  • DYLD_FRAMEWORK_PATH: "${BUILD_PRODUCTS_DIR}: ${SDK_ROOT}:${DYLD_FRAMEWORK_PATH}"
  • IPHONE_SIMULATOR_ROOT: $SDKROOT
  • CFFIXED_USER_HOME: "${HOME}/Library/Application Support/iPhone Simulator/User"
  • DYLD_LIBRARY_PATH: ${BUILD_PRODUCTS_DIR}:${DYLD_LIBRARY_PATH}
  • DYLD_NEW_LOCAL_SHARED_REGIONS: はい
  • DYLD_NO_FIX_PREBINDING: はい

DYLD_FORCE_FLAT_NAMESPACE も試しましたが、これは単純にクラッシュしました。

ここに画像の説明を入力

ステップ 4 - otest 実行可能ファイルの実行

otest 実行可能ファイルを実行してテストのデバッグを開始するには、次のことを行う必要があります。

  1. アクティブ ターゲットを単体テスト ターゲット (私の場合は LogicTestsDebug) に設定します。
  2. アクティブな実行可能ファイルを otest 実行可能ファイルに設定します

実行可能ファイルをビルドして実行し、ブレークポイントを使用してテストをデバッグできます。

補足として、otest 実行可能ファイルの実行に問題がある場合は、以下に関連している可能性があります。

  1. 間違ったパス。私は mac otest を指していたので、最初は多くの問題がありました。起動時に終了コード 6 でクラッシュし続けました。
  2. 間違った引数。バンドル (.octest) 名からスペースを削除するまで、終了コード 1 で otest がクラッシュし続けました。
  3. 環境変数のパスが間違っています。Sean のチュートリアルには、他の人が試したことについての洞察を提供するフォローアップの質問がたくさんあります。私が今持っているセットは機能しているように見えるので、これから始めることをお勧めします.

環境変数に問題があると思われるメッセージがコンソールに表示される場合があります。CFPreferences に関するメッセージが表示される場合があります。このメッセージは、テストの適切な実行を妨げているわけではないので、otest の実行に問題がある場合は、このメッセージに集中しないでください。

ここに画像の説明を入力

最後に、すべてが機能していれば、テストのブレークポイントで停止できます。

ここに画像の説明を入力

最後に一つだけ...

多くのブログで、統合された XCode SenTestKit の主な制限は、アプリケーションのビルド中にテストを実行できないことであると読みました。結局のところ、これは実際には非常に簡単に管理できます。アプリケーション プロジェクトへの依存関係としてロジック テスト バンドルを追加するだけです。これにより、ロジック テスト バンドルが確実にビルドされます。つまり、アプリケーションがビルドされる前に、すべてのテストが実行されます。

これを行うには、ロジック テスト バンドルをアプリケーション ターゲットにドラッグ アンド ドロップします。

ここに画像の説明を入力

4

2 に答える 2

7

この投稿は、実際の質問というよりも「ハウツー」として意図されています。したがって、この回答は、「ハウツー」を「回答済み」としてマークできるようにするためのものです。これはおそらく、コミュニティによって不規則であるとフラグが立てられるでしょう。今後の「ハウツー」記事をどこに投稿するかについての提案を待っています。

ただし、このトピックに関する最後の注意事項が 1 つあります。単体テストを書く価値があるかどうかまだ疑問に思っている人には、間違いなくイエスと答えるでしょう。

私は現在、CoreData を使用してアプリケーションを作成し、Web サービス (xml 解析) からデータを取得しています。完全なモデルは、次のことをしなくてもテストおよびデバッグできます。

  1. シミュレータまたはデバイスで実際のアプリケーションを実行します。テストを実行するためにデバイスを使用する必要がないということは、時間の大幅な節約になります。1回の走行で2分5秒の差です。
  2. モデルのテスト時にビューやコントローラーを作成する必要はありません。完全な開発とテストは、最初の反復でのみモデルに集中できます。モデルが統合のためにクリアされると、残りの開発が続くことができます。

xml 解析をデバッグするには、私が完全に制御する「ハードコードされた」ファイルを使用するだけです。

もちろん、重要なのは、コードに機能を実装するときにテストを作成することです。完全なアプリケーションのデバッグに関しては、実際に時間の節約になります。

ほら、それは置いておきます。

于 2011-02-24T18:33:15.647 に答える
0

次の簡単な手順で、デバッガーでテスト ケースを実行できました。

  1. 製品 > ビルド対象 > テスト
  2. デバッグしたいテストの一部にブレークポイントを置きます
  3. 製品 > テスト

これは Xcode 6.0.1 でのもので、上記の長い手順よりもはるかに便利です。

于 2014-10-12T16:28:05.170 に答える