iOSアプリ開発に使える単体テスト・結合テストのツール

まとめ

結局どれがいいのか?時と場合によるが、自分の場合、以下の二つを使うのがベストではないかと考えた

  • Kiwi (単体テスト用)
  • KIF (UI周りの結合テスト用)

追記 unit testに関しては以下の記事がよくまとまっているので、そちらを参照した方が良いです http://magneticbear.com/lab/ios-unit-testing/

Why so?

単体テスト

代表的なツールににApple製のSenTestingやXCTestがある。が、SenTestingはXcode 5に上がってからXcodeのデフォルトがXCTestになったので、新しいアプリではあえてSenTestingを使う必要はない(ちなみにSentTestingからXCTestへの変更は容易)。

KiwiかXCTestか、といった問題は、正直人によると思うが、RSpecに慣れてる人はKiwiのが使いやすいと思う。XCTestはデフォでサポートされているし使いやすいというメリットはあるが、KiwiはAsynchronous Testing をデフォでサポートしてるというメリットもあるので、個人的にはKiwiを選択した。XCTestとかSenTestingでもAsynchronus testingは可能だけど若干めんどいし、非同期処理のテストのしやすさはやはり重要

結合テスト

iOSアプリのUIテストツール候補 | Qiita によくまとまってる。色々調べた結果、一番メジャーなのは KIF っぽい、かつKIFの方がgithubで人気だからいいんじゃねという短絡的発想です。その他ツールとの比較は、しばらくして気が向いたら書きます。。。

ちなみにGoogleさんも使ってるらしい → http://googletesting.blogspot.jp/2013/08/how-google-team-tests-mobile-apps.html

では、セットアップ方法についてまとめる。

Kiwi [code]

基本的に、Getting Started with Kiwi 2.0 を読めばわかる

Kiwiのセットアップ

CocoaPodsを使う場合についてのみ記述する

Xcode 5

あらかじめXcodeでテスト用のターゲットを作成して、Podfileに以下を追加する。

target :単体テストのターゲットの名前, :exclusive => true do
   pod 'Kiwi/XCTest'
end

Xcode 5未満

target :単体テストのターゲットの名前, :exclusive => true do
   pod 'Kiwi'
end

XCTestを使うかどうか、の違いです

インストール

pod install

でOK、簡単。公式のtutorialは結構長いけど、基本的に確認するだけの作業

KIF [code]

Podfile

Xcodeで結合テスト用のターゲットを作成して、Podfileに以下を追加する

target '結合テストのターゲットの名前', :exclusive => true do
  pod 'KIF', '~> 2.0'
end

インストール

pod install

でOK、簡単。インストール方法の詳細はGithubのREADMEを参照

Githubで検索するとサンプルプロジェクト等出てくるので、そちらで動作確認をするのがおすすめです。

例えばこれ https://github.com/ishkawa/KIFNextExample

注意点

KIFはXCTestではなくSenTestingをベースに作られてる(XCTestに対応しようとしてるpull requestもあるようだけど、まだ本家にmergeされてない)。よって、リンクするライブラリにはSenTestingを指定しないといけない。KiwiはXCTestを使ってるので、注意が必要

継続的インテグレーション?

Jenkins or Bots 使えばいいと思います。どっちもメリットデメリットがあって難しいよなーと思うけど、Jenkinsの方が柔軟性は圧倒的に高いので、Jenkinsを使おうと思ってます。

参考