XcodeではUnitテストが簡単にできるようになっている。
ここではCocoaのプロジェクトでUnit Testを作成、実行する方法を簡単に示す。
テスト用ターゲットのひな形が用意されており、そのターゲットを追加してテストケースクラスを作り、-(void)testXXXというメソッドを作ってビルドするだけ。
ビルドフェーズの最後にテストを実行して結果を表示してくれる。
C++の場合はCocoa Unit Test Bundleの代わりにCarbon Unit Test Bundleを使用するのだが、メソッドを作るだけとは行かず、テストケースを登録するためのコードも書く必要がある。
Independent Test
Cocoa Unit Test Bundleターゲットを追加する
ターゲットにSenTestingKit.frameworkを追加する
New File... Objective-C test case class でテストクラスを作成する
- (void)setUp; - (void)tearDown; - (void)testXXX;
テスト対象のソースファイルもターゲットに追加する
ビルドする
Dependent Test
Cocoa Unit Test Bundleターゲットを追加する
ターゲットの一般(General)の直接依存関係(Direct Dependencies)にテスト対象のターゲットを追加する
ビルドのリンク(Linking)のバンドルローダー(Bundle Loader)に$(BUILT_PRODUCTS_DIR)/xxx.app/Contents/MacOS/xxxを設定する
ゼロリンク(Zero Link)をオフにする
ビルドの単体テスト(UnitTesting)のテストホスト(Test Host)に上記と同じかまたは$(BUNDLE_LOADER)を設定する
!テスト対象のターゲットもゼロリンクをオフにする
ターゲットにSenTestingKit.frameworkを追加する
New File... Objective-C test case classでテストクラスを作成する
(テスト対象のソースはターゲットに追加する必要はない)
ビルドする
エラーの報告は以前の情報も消えずに残っているため、その回のビルドでのエラー件数に注意すること
nilでなければ STAssertNotNil( a, description, ... );
TRUE/YESであれば STAssertTrue( expression, description, ... );
FALSE/NOであれば STAssertFalse( expression, description, ... );
[a1 isEqual:a2]であれば(文字列の比較はこれを使う) STAssertEqualObjects( a1, a2, description, ... );
a1 == a2であれば STAssertEquals( a1, a2, description, ... );
例外が発生すれば STAssertThrows( expression, description, ... );
例外が発生しなければ STAssertNotThrows( expression, description, ... );