iPhoneのユニットテストでGHUnitを使う
今日は久々にiPhoneアプリの勉強をしようとしたものの、
まったく覚えてないのでXcodeに触り慣れるためにGHUnitのサンプルを動かす所までやってみることにした。
GHUnitでUnitTest
Xcodeには元からOCUnitっていうUnitTestのフレームワークがあるみたいで、
それを試して日記書こうとしたんですが、
検索してる途中にGHUnitを見つけてしまったこともあり、
何かそっちの方が面白そうでテンション上がりそうだったのでGHUnitの方にしてみました。
参考にしたサイト
- InstallGHUnit - iphone-codes - ユニットテストフレームワーク「GHUnit」の導入方法 - iPhoneアプリのサンプルコード集と開発に必要な情報 - Google Project Hosting
- GHUnit見つけたきっかけ。
- キャプチャ入りだし丁寧だしコピペしていくだけで済むし、わかりやすい
- gabriel/gh-unit · GitHub
- 本家サイト。
- 上のサイトの通りにやってみたのだけど、どっかで間違えて上手くいかなくなってこっちのサイトも参考にしました。
流れ
何か上手くいかなかった
サイトを参考にしながら試したところ、
"_main", referenced from: start in crt1.10.5.o
ってエラーが出て、何のせいかよくわからず。
とりあえず[ターゲット]>[Tests]の「情報」から「他のリンカフラグ」の項目に行き、
「-dynamiclib」を追加したらエラーが消えた。
# ただ、こんなことしなくても最終的には「-ObjC -framework Foundation -framework UIKit」で問題なかったみたい。
で、エラーが消えて、いざ「ビルドして進行」を試してみたんだけど、
「ビルドは問題なく完了しました」って出るくせにiPhoneシミュレータが起動しない。
またまたどうやって解決して良いのかわからず。
ググってみたところ、Xcodebuild throws assert failures after successful build? - Stack Overflowに書いてあることを試したら上手くiPhoneシミュレータが起動してくれた。
find . -type f -name "*.pbxuser" -exec rm -f {} \; find . -type f -name "*.perspectivev3" -exec rm -f {} \;
あとはターゲットのTestsを右クリックして一回「クリーニング」したら上手くいきました。
そもそもExampleが置いてあった
上のハマったところをどうにか解決しようと躍起になってたのですが、
An example of an iPhone project with GHUnit test setup can be found at: MyTestable-IPhone.
と書いてある通りgitの中にExampleってのがあったのでそれをもっと早く実行してれば良かったです。
(結局このExampleと照らし合わせてハマったところが解決できたので悩んでる時間無駄だったなと。)
Exampleの実行方法
- GHUnit全体をgitで取ってくる
- git clone http://github.com/gabriel/gh-unit.git
- Exampleのプロジェクトを開く
- open gh-unit/Examples/MyTestable-IPhone/MyTestable.xcodeproj
- アクティブターゲットをTestsに変更する
- ⌘(command)+rで「ビルドして進行」するとiPhoneシミュレータが起動する
- シミュレータの右上の「Run」をクリックすればおしまい。
何コレ超簡単。ホントもっと早くやっておけば良かったよ。
ハマりどころで無駄な体力使ったので今日はここまでにして実際のテストはあとで見てみる。