[[FrontPage]] 2010/09/21からのアクセス回数 &counter; #contents ** iPhone SDKのUnitTestは中途半端 [#gfe7292b] iPhone SDKにもUnitTest用のクラスとプロジェクトテンプレートが提供されています。 *** UnitTest バンドルの新規作成 [#l64ea95c] iPhone用のアプリケーションプロジェクト(ここではCopyTextを使います)に、UnitTestバンドルを追加します。 - 「グループとファイル」からプロジェクト名を選択し、右クリックで「追加」→「新規ターゲット」を選択します - 「Cocoa Touch」から「Unit Test Bundle」を選択し、「次へ」ボタンを選択 - ターゲット名を入力します(ここではUnitTestsとします) *** 単体テストクラスを作成 [#f04b24b1] 次に単体テスト用のクラスを作成します。 - プロジェクト名を右クリックで「追加」→「新規グループ」を選択し、グループ名を入力(ここでは「Test Classes」と)します。 - 「Test Classes」を右クリックし、「追加」→「新規クラス」を選択します - 「Objective-C test case class」を選択し、「次へ」ボタンを選択 - クラス名を入力します(ここではMyTestCase)とし、ターゲットをUnitTestsとします。 今回は、APPLICATION_UNIT_TESTを使わないので、MyTestCase.hのdefine文を変更します。 #pre{{ #define USE_APPLICATION_UNIT_TEST 0 }} *** 単体テストの実行 [#f4c3278b] 単体テストの実行は、 - ターゲットを「UnitTests」を選択 - 「実行」メニューから「ビルド」を選択します 単体テストに失敗すると「CopyTest-ビルド結果」のウィンドウにエラーが表示されるのですが、 正常終了の場合は、Build Succeededとしか出力されません。 「何となく」物足りないのと、エラーが発生した場合デバッグすることができないのが、 私が「中途半端」と感じるところです。 試しにtestMathの1+1を1+2に変更し、ビルドして見てください。 &ref(failed.png); のようなエラーが「スクリプト実行」の結果として表示されます。 残念ながらこのままではtestMathをデバッグできません。 ** かっこ悪いデバッガの使い方 [#u6f2627b] とても残念なのですが、色々調べた結果単体テストのデバッグには、次ような作業がプロジェクト毎に必要になります。 - 実行可能ファイルにotestを追加 - otestの情報として、2個の引数と8個の環境変数の設定が必要 この方法は、Scitt Densmore氏の以下のURLを参照しました。 - http://scottdensmore.typepad.com/blog/2010/07/debugging-unit-tests-for-the-iphoneipad.html *** otestの設定 [#s3de1876] octestの追加手順は以下の通りです。 - 「実行可能ファイル」を選択し、右クリックで「追加」→「新規カスタム実行可能ファイル」を選択 - 「実行可能ファイル名」をotest、実行可能ファイルのパスとして、以下の値をセット #pre{{ /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.0.sdk/Developer/usr/bin/otest }} otestの設定 - otestを選択し、右クリックで「情報を見る」を選択し、引数タブを選択します &ref(arg_setting.png); のように引数と環境変数を設定します。 引数は、2個目の引数は、単体テストのターゲット名+.octestとします。 |-SenTest All| | UnitTests.octest| 環境変数は、 |Name|Value|h |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/| |OBJC_DISABLE_GC|YES| |DYLD_LIBRARY_PATH|${BUILD_PRODUCTS_DIR}:${SDK_ROOT}:${DYLD_LIBRARY_PATH}| |DYLD_NEW_LOCAL_SHARED_REGIONS|YES| |DYLD_NO_FIX_PREBINDING|YES| *** デバッガの起動 [#s25fc151] デバッガを起動する前に、もう一度、ターゲットUnitTestsを実行しておきます。 次に、 - testMathの最初の行にブレークポイントを設定 - otestを選択し、右クリックで「ブレークポイントを使ってotestを開始」を選択します。 - 実行からデバッガを表示をクリックすると以下のデバッガの画面になります。 &ref(debugger.png); これで、無事デバッガが使えるようになりました。 ** コメント [#u2ca1c96] この記事は、 #vote(おもしろかった[0],そうでもない[0],わかりずらい[0]) 皆様のご意見、ご希望をお待ちしております。 #comment_kcaptcha