Unit Testing for iPhone App Development

iPhoneアプリ開発におけるユニットテストに関して自分用にまとめてみた。

2つのテストタイプ

Xcodeが提供するユニットテストには2つのタイプがある。

  • Logic tests
  • Application tests

Javaで例えるなら、Logic testsはJUnitで行うようなテストでApplication testsはSeleniumで行うようなテストをカバーするみたい。

ロジックテストの準備

  • テスト実行用のターゲットを追加
    • テンプレートは「Test Bundle」を選択
  • 作成したターゲットをアクティブターゲットにする
  • Testsグループを作成
  • Testsグループ内に「Objective-C test case class」を作成
  • HogeTests.h内の「#define USE_APPLICATION_UNIT_TEST 1」を0にする(App testのコードを削除してもよい)
  • (おまけ)テスト対象となるクラスをテストターゲット内の「ソースをコンパイル」に追加しておくのを忘れずに
  • ビルドをするとテストが実行される
    • テストがどこで失敗したかを、コンパイルエラーのノリで通知

テストが失敗した場合はエディタ上でその箇所を指摘してくれるらしいのだが、設定がわるいのかうまくエラー表示されない。

ビルド結果画面(Command+Shift+B)にもテスト結果は表示されるのだが、なんとも見づらい。「ステップごと→問題ごと」にするとちょっと見やすくなるけど、なんだかなー。

アプリケーションテストの準備

まだ試してない。(ATDKK)

アサーションの書き方

こんな感じに書く。

- (void) testHoge {
    STAssertTrue(YES, @"真であること");
    STAssertEquals(@"hello", @"hello", @"同じであること");
    STAssertEquals(4649, 4649, @"同じであること その2");
}

assertTrue、assertEquals以外ももちろんあって、ここにまとめられてる。あと、どっちにexpectとactualを書くのかが載ってなくて泣ける。

http://developer.apple.com/iphone/library/documentation/Xcode/Conceptual/iphone_development/905-A-Unit-Test_Result_Macro_Reference/unit-test_results.html#//apple_ref/doc/uid/TP40007959-CH21-SW2

参考資料

iPhone Development Guideの中にユニットテスト環境についての情報がまとめられている。ユニットテスト環境がXcodeへ統合されたのはiPhoneSDK3.0から、とのこと。

http://developer.apple.com/IPhone/library/documentation/Xcode/Conceptual/iphone_development/135-Unit_Testing_Applications/unit_testing_applications.html