もう一つのBDDスタイルのiOSテスティングフレームワーク「Kiwi」の導入方法
前回のcedarに引き続き、BDDスタイルのiOSテスティングフレームワークのKiwiについての紹介。
Kiwiについては以下のサイトがとてもよくまとめてくれているので、そこを見るだけでもいい気がしますが、
最近になってKiwiの導入方法等も変わったので、新しくなったKiwiの導入方法についてです。
どちらにしても下記のサイトは参考になるのでKiwiを使うには読んでおくべきでしょう。
公式にもインストール方法のページGuide: Up and Running with Kiwi – GitHubがあるので、そちらも読むといいです。
とても細かくかいてあります。(絶対パスで指定したりする部分があるのが微妙ですが)
今回作成したサンプルプロジェクトは以下に置いてあります
まずはOCUnit環境の構築から始めます。(既にその環境ができてるなら飛ばしても大丈夫です)
ちょっと詳しくは知りませんが、OCUnit環境の上にKiwiの環境を重ねて作るというようなイメージで。
プロジェクトの作成

既にできてるプロジェクトに追加する場合は、途中からOCUnitを追加するのと同じでtargetにTest bundleを加えてやればいい。とりあえずここまでやればOCUnitのテストはできてる状態。

手動でターゲットにTest Bundleから追加した時はSchemeにそのターゲットのSchemeが追加されるが、
メインとなってるSchemeを選んでいるときにもTestを実行できるようにするには、メインSchemeの編集で、
Testの部分にTestターゲットを関連付けすればメインSchemeからTestを実行できるようになる。(プロジェクト作成でInclude Unit Testした場合はこれが自動で行われている)

ここからがKiwiの導入
まずはKiwiを入れたいプロジェクトがあるディレクトリまでコンソールで移動しておく
1
2
3
4
5
6
7
8
9
10
11
12
13
14 ➜ KiwiSample git:(master) ls
KiwiSample KiwiSample.xcodeproj KiwiSampleTests
➜ KiwiSample git:(master) git submodule add https://github.com/allending/Kiwi.git Kiwi
Cloning into Kiwi...
remote: Counting objects: 1305, done.
remote: Compressing objects: 100% (453/453), done.
remote: Total 1305 (delta 821), reused 1288 (delta 807)
Receiving objects: 100% (1305/1305), 12.59 MiB | 1.19 MiB/s, done.
Resolving deltas: 100% (821/821), done.
➜ KiwiSample git:(master) ✗ ls [~/Dropbox/workspace/iOS/project/KiwiSample]
Kiwi KiwiSample KiwiSample.xcodeproj KiwiSampleTests
➜ KiwiSample git:(master) ✗ git submodule update --init # Kiwiをアップデートしておく [~/Dropbox/workspace/iOS/project/KiwiSample]
Submodule 'Kiwi' (https://github.com/allending/Kiwi.git) registered for path 'Kiwi'
➜ KiwiSample git:(master) ✗ open Kiwi [~/Dropbox/workspace/iOS/project/KiwiSample]
このようにして、Kiwiをプロジェクトのgitサブモジュールとして追加しておきます。(まだプロジェクト自体には入っていない)こうしておけば、以降はgit submodule updateとかでKiwiがアップデートできるようになると思います。
そして、最後にopen KiwiでKiwiディレクトリを開くと、Kiwi.xcodeprojがあるので、それをプロジェクトに追加します。

Kiwiの導入 – 設定
まずはのBuild Phasesタブ設定から
そして、プロジェクトに作ったテストターゲット(画面ではKiwiSampleTest)のBuild Phases -> Target Dependiciesから先ほど追加したKiwiを依存関係に加えておきます。


次に、同じくテストターゲットのBuild Phase->Link Binary With LibraiesからWorkspaceにあるlibKiwi.aを追加します。

次はBuild Settingタブ
テストターゲットのBuild Setting -> ”User Header Search Paths”に、追加したKiwi.xcodeproj内のソースを参照するように、Kiwi/Kiwi とパスを追加します。

最後にテストターゲットのBuild Setting -> ”Other Linker Flags“におなじみの-all_loadを追加します。

これで、Kiwiの準備は完了で後はテストケースを書いていくだけです。
KiwiSampleTests.m という次のようなファイルをテストターゲットに追加していけばテストケースを書いていけます。
1
2
3
4
5
6
7
8
9
10
11
12
13 #import "Kiwi.h"
SPEC_BEGIN(MathSpec)
describe(@"Math", ^{
it(@"is pretty cool", ^{
NSUInteger a = 21;
NSUInteger b = 21;
[[theValue(a + b) should] equal:theValue(42)];
});
});
SPEC_END
Kiwiのいい所はデフォルトでOCUnitと同じようにTestからテストを実行できるようなっている所。

KiwiはBlocksを使ったBDDライクな書き方ができようになっていて、この辺はCedarと同じです。(語弊ありますが)
また、Kiwi自体にMockとStubの機能が含まれていたりするようです。
Kiwiについてのドキュメントですが、以前はkiwi-lib.infoがあってそこにまとまっていましたが、今はKiwi WikiというGithub上に集めているみたいなので(まだ未完成なのでドキュメントが行方不明です…)、そちらを参照するのがいいでしょう。
一応まだサイト上には過去のドキュメントが残ってるのでそれを見るのがいいかも。
導入方法の参考
- Guide: Up and Running with Kiwi – GitHub (公式のWiki)
- navellabs/KiwiFromScratch – GitHub (実際にやるときはコチラのほうが参考になる)
- azu/Kiwi-sample – GitHub 今回作ったサンプルプロジェクト
おまけ
自分はAppCodeを普段使っているので、TestをAppCodeで走らせたいと思います。
Edit Configuration から OCUnitとしてターゲット:KiwiSampleTestsを指定します。

そして、Configを作ったOCunit(画面だとKiwiTest)に切り替えて実行するとテストが実行できます。
(#import “Kiwi.h”でWarningが出てしまいますが、ちゃんと動作します)
OCUnitをAppCodeで実行するのと同じでグリーン、レッドバーで結果が表示されます。

補完とか整形が若干おかしいのが残念ですが、構文自体は結構好きです。
Tech-Gymについて
Tech-Gymは、技術者の方向けの技術情報ブログです。株式会社プラスアールに所属している技術者が、ソーシャルゲーム、iPhone/Androidアプリ、キャリア公式サイトなどを運用しながら得た技術知識を、惜しみなく御紹介していきます!
素敵な仲間募集中です!!Facebook ファンページ
著者
■嶋田
名古屋グランパス一途な、雑食 草食系エンジニアです。
- twitter : @seltzer24
- facebook :4mada
■谷口
JAVAアプリ業界からソーシャル業界へ、現在初心に戻って頑張り中。
- twitter : @gucci1208
- facebook :gucci1208
■azu
Objective-C(iOSアプリ)、JavaScriptを書いています。
関連website
このページを友達と共有

