前回のcedarに引き続き、BDDスタイルのiOSテスティングフレームワークのKiwiについての紹介。

Kiwiについては以下のサイトがとてもよくまとめてくれているので、そこを見るだけでもいい気がしますが、
最近になってKiwiの導入方法等も変わったので、新しくなったKiwiの導入方法についてです。
どちらにしても下記のサイトは参考になるのでKiwiを使うには読んでおくべきでしょう。

公式にもインストール方法のページGuide: Up and Running with Kiwi – GitHubがあるので、そちらも読むといいです。
とても細かくかいてあります。(絶対パスで指定したりする部分があるのが微妙ですが)

今回作成したサンプルプロジェクトは以下に置いてあります

まずはOCUnit環境の構築から始めます。(既にその環境ができてるなら飛ばしても大丈夫です)
ちょっと詳しくは知りませんが、OCUnit環境の上にKiwiの環境を重ねて作るというようなイメージで。

プロジェクトの作成

NewImage

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

NewImage

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

NewImage

ここからがKiwiの導入

まずはKiwiを入れたいプロジェクトがあるディレクトリまでコンソールで移動しておく

➜  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があるので、それをプロジェクトに追加します。

NewImage

 

Kiwiの導入 – 設定

まずはのBuild Phasesタブ設定から

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

NewImage

NewImage

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

NewImage

次はBuild Settingタブ

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

NewImage

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

NewImage

これで、Kiwiの準備は完了で後はテストケースを書いていくだけです。
KiwiSampleTests.m という次のようなファイルをテストターゲットに追加していけばテストケースを書いていけます。

#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からテストを実行できるようなっている所。

NewImage

KiwiはBlocksを使ったBDDライクな書き方ができようになっていて、この辺はCedarと同じです。(語弊ありますが)
また、Kiwi自体にMockとStubの機能が含まれていたりするようです。

Kiwiについてのドキュメントですが、以前はkiwi-lib.infoがあってそこにまとまっていましたが、今はKiwi WikiというGithub上に集めているみたいなので(まだ未完成なのでドキュメントが行方不明です…)、そちらを参照するのがいいでしょう。

一応まだサイト上には過去のドキュメントが残ってるのでそれを見るのがいいかも。

導入方法の参考

おまけ

自分はAppCodeを普段使っているので、TestをAppCodeで走らせたいと思います。

Edit Configuration から OCUnitとしてターゲット:KiwiSampleTestsを指定します。

NewImage

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

NewImage

補完とか整形が若干おかしいのが残念ですが、構文自体は結構好きです。

 

Post Navigation