[iOS] OCUnitで単体テスト〜アプリケーションテスト

2010年11月23日火曜日 | Published in | 0 コメント

このエントリーをはてなブックマークに追加

[前回] Cocoaの日々: [iOS] Static Library (6) OCUnitで単体テスト

iOS Development Guide: Unit Testing Applications によればXcodeでOCUnit を使ったテストは2通りある。

  • Logical Tests
  • Application Tests

前回やったテストが Logical Tests にあたり、これはビルド時にテストを実行する。一方、Application Tests はビルド時ではなくアプリケーション実行時にテストを実行する。今回はこれを試してみた。

こんなプロジェクトを作る。ApplicationTestSampleTesting がアプリケーションテスト用ターゲット。
アプリを実行するとこんな内容がデバッグコンソールへ出力される。


手順


手順は iOS Development Guide: Unit Testing Applications に分かりやすく記載されている。今回は新規にプロジェクトを作成して試してみる。

1. 新規プロジェクト

View-based Application テンプレートを使って新規にプロジェクトを作成する。名前を ApplicationTestSample とした。


2. アプリケーションテスト用ターゲット作成

デフォルトで用意されるターゲットを複製する(右クリックで「複製」を選択)。名前は <アプリケーション名>Testing とする。


3. テストケース用ターゲット追加

続いてテストケース用ターゲット(バンドル)を追加する。「ターゲット」を右クリックして「追加」→「新規ターゲット」でダイアログを開き "Unit Test Bundle" を追加する。名前は "AppTests" とする(名前の最後を "Tests" としておく)。

次にこのターゲットをドラッグ&ドロップでアプリケーションテスト用ターゲット "ApplicationTestSampleTesting" に追加する。
さらい "Products" 内の "AppTests.octest" を "ApplicationTestSampleTesting" の「バンドルリソースをコピー」へドラッグ&ドロップで追加する。
これでアプリケーションにテストバンドルが格納され、実行時にテストが走るようになる。


4. テストコード作成

テストケース用のクラスを新規作成する。
名前を AppTest として追加先のターゲットは "AppTests" とする。
中身はこんな感じ。
#import <SenTestingKit/SenTestingKit.h&;gt;
#import <UIKit/UIKit>

@interface AppTests : SenTestCase {

}

@end
#import "AppTests.h"

@implementation AppTests

- (void) testFail {
 STFail(@"Must fail to succeed.");
}

@end

5. 実行

さて実行してみよう。実機を接続して実行する。

出た。デバッグコンソールに表示されるので非常に見づらい
Xcodeの「デバッグ」の設定でデバッグコンソールの色が変えると多少ましにはなる(あんまりかわらないか)。
こんな感じ。

なお、アプリケーションテストは実機でしか試せない。
シミュレータで実行しようとするとビルド時にテストコードが走ってしまいテストに失敗した場合は実行ができないので注意。これはリファレンスにちゃんと書いてあるのだが見落としていて最初はまった。


ソースコード


GitHub からどうぞ。
ApplicationTestSample at 2010-11-23 from xcatsan's iOS-Sample-Code - GitHub


参考情報


iOS Development Guide: Unit Testing Applications
単体テストの公式リファレンス

Cocoa with Love: A sample iPhone application with complete unit tests
公式リファレンスの補足的な資料となっている

Responses

Leave a Response

人気の投稿(過去 30日間)