Unit Tseting from Xcode

TopPage

OCUnit

HeaderDoc

GNUstep

Xcode

EmacsWiki


PageList

ChangeLog

何処にテストケースを書くべきか
どのようにXcode からテストを行うか
ビルド毎のテスト
アプリケーションを実行時にテスト
どちらを使うべきか
テンプレート
Notes
プロジェクト・テンプレート
ターゲット・テンプレート
ファイル・テンプレート
もっと知りたい方はこちら

何処にテストケースを書くべきか

従わなければならない規則は特にありません.何処にテストケースを書くべきかについては異なった意見があります.あなたの好みと要求によってテストコードを書く事が出来ます.

  1. 別プロジェクトでテストコードを書く
  2. 同プロジェクト,別ターゲットでテストコードを書く
  3. 同プロジェクト,同ターゲットでテストコードを書く

TestingKitは2番目の方法をつかってます.

OCUnitディストリビューションでは他の例のExampleコードがあります. 例えば,PersonCompleteプロジェクトは同プロジェクトと同ターゲットにテストを入れています. 一方,SenRandomTestプロジェクトは別プロジェクトのSenFoundationプロジェクトの一部をテストしてます.

あなたの選択、あなたがそうすることができるものは何でもあなたのプロジェクトを、実行可能プログラムを走らせるとき、それぞれのビルドの後に、あるいは要求次第 Xcode から自動的にテストを行うように設定します。 ビルド毎にXcodeから自動でテストするか,テストしたいときにテストをするか,どの手法を選んでもかまいません.あなたのプロジェクトでそれぞれ設定できます.

どのようにXcode からテストを行うか

テストは2つの異なった方法で Xcode から実行されることができます.ビルド毎にテストを実行するか,アプリケーション実行時にテストを実行するかの2つです.

ビルド毎のテスト

Xcodeから呼びだされる2つのツール(otest とRunTargetUnitTests)が直接テストを走らせます. これらのツールは何処にインストールしてもかまいません. しかし,プロジェクトのパスにツールをインストールした場所を追加してください. 推奨するインストール場所は otestsは"/usr/local/bin/otest"または"~/Developer/Tools/otest". RunTargetUnitTestsは"~/Developer/Tools/RunTargetUnitTests" です.

  • テストするターゲットに新しい「シェルスクリプトビルドフェーズ」を加える
  • そのシェルスクリプトビルド・フェーズをインスペクターで開いて,RunTargetUnitTests ツールへのパスを指定してください。(Fig.1)
  • ターゲット・インスペクターでビルド設定に"TEST_AFTER_BUILD = YES"を加える.(テストの実行をビルド・スタイルでだけで実行する方が良いと思うならば,"TEST_AFTER_BUILD = YES"をビルド・スタイル設定に追加する.ただし,Xcodeの現在のバージョンにはバグがあります.Xcdoeはシェル・スクリプトにビルド・スタイル変数を引き渡しません.つまりこれはうまく動かないのです.)
  • もし otestを"~/Developer/Tools/otest"の場所以外にインストールしたならば, インスペクターからビルド設定でOTESTbuildにotestへのパスを設定してください.

Fig1:シェルスクリプト・インスペクター(画像の表示方法がわからないので画像はってません)

ターゲットをビルドした時(あるいはスタイルをビルドしたとき),ビルド後にテストが実行されます.そしてテスト結果がビルド・ビルドウインドウに記録されます.(Fig2)

ビルド・ウインドウに表示されたエラー行を選択すると,failedを出したテストコードがエディター上で選択されます.(しかし,これらfailedを出したテスト・コードは「エラーと警告」スマート・グループにレポートされません.)

Fig2:ビルド・ウインドウに表示されるテスト結果

アプリケーションを実行時にテスト

ターゲットの「実行可能ファイル」設定で「実行時にテスト」を行う事が出来ます.

アプリケーションのような実行可能ファイルの起動引数として"-SentTest"を加えてください.("-SenTest All" はフレームワークも含めた実行可能ファイルのテストを行います."-SenTest Self"は実行可能ファイルのテストだけを行います."-SenTest None" ではテストを行いません)

Note:ゼロ・リンクでオプションでビルドされたアプリケーションからの自動テストは現在サポートされていません.

If your project has no executable (for instance a framework):

  • create a "New Custom Executable";
  • in the assistant, use otest as the name, and give the path to otest;
  • in the executable editor, specify the path of the unit to be tested.

もしあなたのプロジェクトがフレームワークのように実行可能形式でないならば以下の事をしなければなりません.

  • "新規カスタム実行可能ファイル"を作成する.
  • "アシスタント"でotestの名前とotestまでのパスを設定する.
  • "実行可能ファイル:otest"でテストされるユニット(例えばフレームワークとか)へのパスを指定する.
    例えば: -SenTest Self /Developer/Builds/Test.framework. (Fig3)

Fig3 otestの実行行可能ファイル設定

この実行可能ファイルを実行したりデバッグした時,これらのテスト結果はコンソーツに出力されます.

どちらを使うべきか

両方の方法を交互に使う事が出来ます.最初の手法では,コーディング,ビルド,テストを短いサイクルで実行する事ができます.一方,2つ目の手法ではテストに失敗したときのデバッグ時に有効です.

テンプレート

OCUnit は多くのテンプレートを含んでいます。 これらは、例えば"~/Library/Application Support/Apple/Developer Tools/"に置く事で、使える様になります.

Notes

  • 今は,ビルド・スタイルから確実にテストを起動する事が出来ません.これらのテンプレートは"TEST"ビルド・スタイルでもプロダクト・ターゲットでも同じく "TEST_AFTER_BUILD = YES" を定義してます.
  • ターゲットは、先に記述されるようにシェルスクリプトビルド・フェーズを含んでいます.このシェルスクリプトは"~/Developer/Tools/RunTargetUnitTests"を使うように設定されます.あなたはこのスクリプトの場所に対するあなたの好みを反映するためにこのテンプレートを修正することができます.

プロジェクト・テンプレート

  • Cocoa + Test Framework
    CocoaとSenTestingKitフレームワークにリンクされているフレームワーク・プロジェクト
  • Cocoa + Test Application
    CocoaとSenTestingKitフレームワークにリンクされているアプリケーション・プロジェクト
  • Cocoa Document-based + Test Application
    CocoaとSenTestingKitフレームワークにリンクされているドキュメントベース・アプリケーション・プロジェクト
  • Cocoa + Test Bundle
    CocoaとSenTestingKitフレームワークにリンクされているバンドル・プロジェクト

ターゲット・テンプレート

  • Test Framework.trgttmpl
    CocoaとSenTestingKitフレームワークにリンクされているターゲット

ファイル・テンプレート

  • Objective-C SenTestCase subclass.pbfiletemplate
    SenTestCaseのサブクラスのためのテンプレート

もっと知りたい方はこちら

http://www.sente.ch/software/ocunit/

feedback@sente.ch


Updated: 2004-01-14 MindTools