2011-01-09 18 views
5

アップルのinstructionsに続き、私のプロジェクトでユニットテストをセットアップしました。私はそれらを従属させるための指示に従ったので、テストは私のメインプロジェクトのすべてのビルドで実行されます。これは動作し、テストに合格するとアプリケーションが実行されます。そうでないときは、失敗した単体テストの行にビルドエラーが発生します。Xcode 3で単体テストをどのようにデバッグしますか?

しかし、テストが失敗したときに私のアプリケーションコードをステップ実行することができますが、Xcode(3.2.5)が正しく設定されていないとします。このプロジェクトはiOSではなくMacプロジェクトです。

herehereの命令を試しましたが、私が設定したブレークポイント、ユニットテストコード、またはアプリケーションコードで実行が停止することはありませんでした。最初の命令セットの後、私が設定したブレークポイントは青色の輪郭を持つ黄色に変わり、その意味も分かりません。テストを進めるには何が必要ですか?

更新

私は私のメインの実行ファイルに引数と環境変数を追加することで、この問題を解決しようとすると別のページ(here)を見つけましたが、もう一度、それらは実行が私のブレークポイントで停止することはありませんでした。私はまた、私のテストの(豊富な)ログステートメントが私のデバッガコンソールにも表示されていないことに気づいた。

また、黄色のブレークポイントは、実行時に見つからないコードを意味することがわかりました。これらは私のテストケースクラスにあるので、なぜそれらが発射されないのかを説明するようです。

答えて

0

私のために働いたのはXcode 4にアップグレードすることだけでした。美しく統合されました。 little bit of painがありましたが、これで終わったので、統合は素晴らしいです。私はテストとアプリケーションコードを一歩一歩踏み出すことができます。

0

ユニットテストを開発して、ターゲットを持つプロジェクトにあるプログラムをラップするようにしてから、依存プロジェクトを開いて作業してください。これはおそらくライブラリを持つプロジェクトであり、ライブラリを呼び出す実行可能ファイル(2つのターゲット)です。依存関係の単体テストでこのライブラリを呼び出すだけで、プロジェクトを開いてデバッグすることができます。これはよりモジュラーなアプローチです。

幸運

2

私は通常、ブレークポイントで停止を含むXcodeの3.2と私のOCTestテストをデバッグする問題がありません。

基本的な考え方は、バンドルを引数としてotestを起動するようにgdbに指示することです。これを行うには、/Developer/Tools/otestをカスタム実行可能ファイルとしてXcodeプロジェクトに追加してから、OCTestバンドル名を唯一の引数として選択します(プロジェクトメニューの "Edit Active Executable otest"を選択し、2番目のタブでFoo.octest Fooテストをデバッグするためのトップボックスにあります)。

今すぐデバッグボタンを押すと、テストバンドルのデバッグが開始され、宣言されたブレークポイントで停止します(ビルドおよびヒットした場合、テストが合格しないと起動しない可能性があります)。ガベージコレクションを無効にするには、環境変数をYESに設定する必要があります(同じ「引数」タブの下のボックスにあります)。必要に応じてotestが正確に指示します。

上記をすべて実行してもテストコードにステップインすることができない場合は、デバッグシンボルの生成をオフにしてコンパイルされている可能性があります - デバッグビルド設定を確認しますが、まったく再コンパイルされません。あなたのログがコンソールに表示されていないので、NSLogはXcodeコンソールに書き込む必要があります。手作業でビルドとbinフォルダをクリーンアップします。パスや名前を変更したときに、古いコードをロードすることがあります。また、ファイルがテストターゲットから飛び出していないことを確認したい場合もあります(同じ非ロギングファイルで失敗したテストですか?)。

1

私もあなたが提供したリンクの中で解決策を試しましたが、誰も私のために働いていませんでした。しかし、私はこの1つを見つけた:http://hiediutley.wordpress.com/2011/03/08/xcode3-debugging-ios-unit-tests/ - それは魅力のように動作します:)フレッシュなものも。

+0

申し訳ありませんが、私がXcode 4を使用しているので、もう動作しているかどうかは確認できません。 – Dov

2

私には、Hiedi Utleyの投稿にhttp://hiediutley.wordpress.com/2011/03/08/xcode3-debugging-ios-unit-tests/という投稿があります。私が気に入っていなかったのは、ユニットテストバンドルターゲットの複製です。ビルド後にユニットテストを実行する実行スクリプトフェーズと、ユニットテストを実行しなかったユニットがありました。私は、スクリプトを実行するフェーズでGet Infoペインで「インストール時にのみスクリプトを実行する」を切り替え、通常モードで単体テストを実行してデバッガで実行するかどうかを切り替える方法であると考えました。

Hiediの指示に従って、新しい実行可能項目、たとえばLogicTestsGDBを作成します。

[全般]タブ:

  • パス:Developer/usr/bin/otestノーリード/
  • パスタイプ:そうのようにそれを構成する作業ディレクトリを設定しRelative to Current SDK
  • に:Build Products directory

引数Ta B:

  • 引数:あなたのUnitTestをバンドル(例えば。 LogicTests.octest)
  • 変数は環境
    • DYLD_LIBRARY_PATH ... : ${BUILD_PRODUCTS_DIR}:${DYLD_LIBRARY_PATH}
    • DYLD_FRAMEWORK_PATH . : ${SDKROOT}/Developer/Library/Frameworks
    • DYLD_ROOT_PATH ...... : ${SDKROOT}
    • IPHONE_SIMULATOR_ROOT : ${SDKROOT}
    • OBJC_DISABLE_GC : YES
    • DYLD_NEW_LOCAL_SHARED_REGIONS : YES
    • DYLD_NO_FIX_PREBINDING : YES
    • に設定します完了
    • CFFIXED_USER_HOME : ${HOME}/Library/Application Support/iPhone Simulator/

。今すぐあなたのユニットテストをデバッグするには、

  1. は、バンドルのビルドフェーズを公開し、スクリプトの実行相をダブルクリックします。オプションユニットテストバンドル(例えば。LogicTests.octest)であることをアクティブターゲットを設定
  2. をインストールするだけ
  3. チェック実行スクリプト。 (例えば。LogicTestsGDB)作成された新しい実行可能にアクティブな実行可能ファイルを設定
  4. が正常に実行するには、ここをクリックしてビルドとデバッグ

、のビルドフェーズの一環として、ユニットテストを実行する

  • アプリケーション:

    1. がバンドルのビルドフェーズを公開し、スクリプトの実行相をダブルクリックします。アプリケーションをするアクティブなターゲット設定しオプション
    2. をインストールする際に
    3. のチェックを外し実行スクリプトのみ内蔵されているアプリケーションであることをアクティブな実行可能ファイル設定し
    4. を構築されて

    上記の手順を自動化するために、私は2つの状態を切り替えるシンプルなAppleScriptスクリプトを作成しました:

    property kApplicationName : "MyApp" -- name of the normal application to build 
    property kUnitTestName : "LogicTests" -- name of the bundle target to debug 
    property kUnitTestRunner : "LogicTestGDB" -- name of the executable to use when debugging the unit test bundle 
    
    tell application "Xcode" 
        tell the active project document 
        set theTarget to first target whose name is kUnitTestName 
         set thePhase to first run script phase of theTarget 
         if name of active target is kApplicationName then 
          set active target to theTarget 
          set theExecutable to first executable whose name is kUnitTestRunner 
          set active executable to theExecutable 
          set run only when installing of thePhase to true 
         else 
          set theTarget to first target whose name is kApplicationName 
          set active target to theTarget 
          set theExecutable to first executable whose name is kApplicationName 
          set active executable to theExecutable 
          set run only when installing of thePhase to false 
         end if 
         return "Targeting " & (name of active executable) 
        end tell 
    end tell 
    
  • 関連する問題