iPhoneと単体テスト環境構築メモ
iPhone上での開発について自分用のメモを兼ねて公開。
Appleは規約においてiPhone Development Centerで入手したすべての情報は機密であるから公開してはならない、としているので、技術情報をポンポンWebに載せたりはできない。(参考:ここなど)
ここに書く内容はGoogleで検索してApple以外のサイトで得られた情報と、自分のXCodeでの動作実験をまとめただけのものであることをあらかじめお断りしておきます。
今回取り組んだのは、XCode上で単体テストをする環境整備。まだまだプラットフォーム自体知らないことがたくさんあるのでこれはぜひとも必要だ。単体テスト環境とiPhone実機では挙動が異なる点が見つかってアセるシーンも将来たぶんあるだろうけど、まずはここから。
その大まかな手順は以下のとおり。
(1) 新規にターゲットを作成し、種類はCocoaの"Unit Test Bundle"を選択。
(2) 参照するフレームワークにSenTestingKit.frameworkを追加。パスは/Developer/Library/Frameworks以下にあるものが正しく、/Developer/SDKs/...以下にあるものではNGなので注意。(実はここで1時間以上ハマってた)
(3) 適当にテストケースを書く。テストケースを記述したクラスは(1)で作成したターゲットにのみ含まれるようにする。テストの書き方はxUnit系列と概ね一緒で、SenTestingKitでWebを検索すればサンプルはいろいろ見つかる。
(4) ターゲットの設定で、リンクカテゴリにある「実行パスの検索パス」を$(DEVELOPER_LIBRARY_DIR)/Frameworksに設定。(意味のよくわからない訳語だが、英語版のXCodeではrunpath search pathだそうである)
(5) ターゲットをビルドする。このときプラットフォームをMac OS Xにしないといけない。iPhoneのままだとi386プロセッサでは動かない云々のエラーが出る。テストはMacOS上で動くのだからこの設定は当然なのだけど、iPhoneとMacOSのそれぞれのCocoaで挙動が異なる部分がある場合は困ることになるので注意。
(6) ここまですると、コンパイルが通ると同時にテストが走るようになる。STAssertTrue(false, @"hoge")みたいな確実に失敗するテストを試しに書けば、実行されているかどうか確認できる。
ここまでで第一段階は終わり。ビルドと同時にテストが走るのはよいのだが、それだとテストが失敗する場合にデバッグできず路頭に迷うので、次にその設定をする。これについてすごく役立ったのはここ。
(7) XCodeのメニューから、プロジェクト - 新規カスタム実行ファイル を選び、/Developer/Tools/otestを選択。名前は適当につける。
(8) 引数と環境変数を次のように設定
3番目の引数は(1)で作成したターゲットの名前 + ".octest"(このディレクトリ内にビルドした内容が置かれる)である。
ちなみに、2番目の引数の All のかわりに TestCaseClassName/methodName とすると特定のテストのみを実行できる。
(9) さらに、上の画面の"一般"タブで作業ディレクトリを「ビルドプロダクトディレクトリ」にする。
(10) ターゲットのGCCの設定で、GCをsupportedにする。iPhoneではGCはサポートされないが、otestはGC環境がないと動かない。(ということは、retain/releaseがちゃんとできていることを確認するテストに影響が出る。ここはぜひとも今後解決したい)
これで、(7)で作ったものをアクティブ実行可能ファイルに選択し、XCodeの実行 - デバッグを選択するとテストケースがデバッガのもとで走るようになる。
あとはコードをガリガリ書いてテスト-修正サイクルを回していくだけだぜ!
« 主夫生活 | トップページ | Objective-Cのここが嫌い »
コメント
この記事へのコメントは終了しました。
僕も岡嶋さんの様に頭が良く生まれてきたかったなあ、そしたらもっと遥かに人生を豊かに出来ただろうにな。でも、頭の良くない自分でも、未知なこと。何故自分が存在しているのだろう。とか
死後のこととか考えると、わけのわからない不安と恐怖を感じてしまうのだけれども、間違いなく
遥かに賢い岡嶋さんがそんなことを考えたらやはり僕以上に不安、恐怖、畏敬、そんなものを感じるのだろうか?僕は深く考えると変になりそうに
なるので、極力そんなことを考える事は避けてしまいます。
投稿: | 2008.08.03 21:24