はじめまして。Web 系企業で6,7年 QA という業務に携わっている今年三十路のモノです。日頃はスクラムチームにて主に iOS, Android のハイブリッドアプリのQAをしています。
今回、先日バージョンアップされたばかりのKIFを Quesプロジェクト にCocoaPodsでインストールし、簡単なテストを書いてそれを実行しようと思います。
・アラートで “YES” を選択すると、ライオンの画像が表示される
L Textfield
L Button
L ImageView (default:hidden)
Class file
L alertview
流れ
- KIFってなに?
- 実行環境
- 導入
- Xcodeの設定
- Podfileの作成
- アクセシビリティの設定
- テストを書く
- テスト実行
- コマンドラインから実行
- ショートカットで実行
KIFってなに?
モバイルクレジットカード決済サービスを展開しているSquare社が、無料で公開しているiOSのインテグレーションテストフレームワークです。テストはObjective-Cで記述する為、比較的自由度の高いテストを実現できます。
https://github.com/kif-framework/KIF
実行環境
- Xcode5.1
- Mac OS X10.9.2 Mavericks
- CocoaPods0.29
- KIF3.0
導入
Xcodeの設定
まずはXcodeの設定をします。
Ques.xcodeprojを開いて、以下の手順でtesting bundleを追加します。
- “project and target list” で + を選択
- “choose a template for your new project” で Cocoa Touch UnitTesting Bundle を選択し、次の画面へ
- Product Name を QuesTests
- Type は、XCTestを選択
- Project, Target は変更せずにそのままで、Finish.
すると、ターゲットリストに “QuesTests” という testing bundle が表示され、
プロジェクトナビゲータには “QuesTests” というグループが作成されます。
テストファイルは主にこのグループ配下に作成していきます。
この時点で、”QuesTests” グループ内には仮のテストケースが書かれているクラスファイルが入っています。このテストケースは必ず fail を返すので、テストを実行する際は当該行をコメントアウトするかクラスファイル自体を削除します。
次に、追加した “QuesTests” という testing bundle をアプリケーションとリンクさせます。”project and target list” の “QuesTests” を選択し、”Build Setting” と “Test Host” を以下の様に設定します。
- “Bundle Loader” を $(BUILT_PRODUCTS_DIR)/Ques.app/Ques に設定
- “Test Host” を $(BUNDLE_LOADER) に設定
そして、一旦 Ques.xcodeproj を閉じます。
Podfileの作成
次に、KIF をインストールする為、Ques.xcodeproj と同じディレクトリに Podfile を作成します。
cd Ques/ vi Podfile
KIF3.0 は、OCUnit Framework を採用している KIF と、XCTest Framework を採用している KIF の2つのタイプが存在します。それぞれで Podfile に記述する内容が異なります。
XCTest タイプの KIF をインストールする場合、Podfile に以下を記述します。
target 'QuesTests' do pod 'KIF', '~>3.0' end
OCUnit タイプの KIF をインストールする場合はこちら。
target 'QuesTests' do pod 'KIF/OCUnit', '~>3.0' end
” Deprecations
OCUnit and the SenTestingKit framework are deprecated and will be removed from a future release of Xcode. Source code using OCUnit generates warnings while being compiled in Xcode 5.1. ”
詳細は コチラ.

今回は XCTest タイプの KIF をインストールします。
インストール出来たら、Podfile と同じディレクトリにある Ques.xcworkspace を開きます。
アクセシビリティの設定
KIF は、UIオブジェクトへのアクセスにアクセシビリティを利用します。
テストを書く前にUIオブジェクトにアクセシビリティを設定します。
アクセシビリティは、InterfaceBuilder とクラスファイルから設定する事が出来ます。
UIオブジェクトがInterfaceBuilder上で定義されている場合、
InterfaceBuilder の Identity Inspector > Accessibility > Label にて設定する事が出来ます。
また、tableview 等、”Accessibility” の無いUIオブジェクトも存在します。その場合は、InterfaceBuilderの Identity Inspector > User Defined Runtime Attributesから設定します。例えば以下のように設定します。
- Key Path: accessibilityLabel
- Type: String(Valueの型)
- Value: hoge (任意のアクセシビリティラベル)
また、UIオブジェクトが InterfaceBuilder 上ではなく、クラスファイルで定義されているケースもあります。動的にオブジェクトを切り替えたりしている場合などです。
そのような場合、クラスファイルでアクセシビリティを設定します。
例えば以下の様に設定することが出来ます。
UIButton *btn; [btn setAccessibilityLabel:@"Accessibility Label"];
- Button(Show Alert)
- accessibility : showalertbutton
- Textfield(Input Text)
- accessibility : textfield
- ImageView(LionView)
- accessibility : lionview
- AlertView
- ButtonTitle : YES, NO
#import <KIF/KIF.h>
-(void) testShowLionView{ }
そして、-(void)testShowLionView にテストケースを追加します。
Quesプロジェクトで出来る事に対して、以下のようなテストケースを追加します。
-(void) testShowLionView{ //accessibilityがtextfieldのUIオブジェクトに"lion"と入力 [tester enterText:@"lion" intoViewWithAccessibilityLabel:@"textfield"]; //accessibilityがshowalertbuttonのUIオブジェクトをタップ [tester tapViewWithAccessibilityLabel:@"showalertbutton"]; //accessibilityがYESのUIオブジェクトをタップ [tester tapViewWithAccessibilityLabel:@"YES"]; //accessibilityがlionviewのUIオブジェクトが表示されたか? [tester waitForViewWithAccessibilityLabel:@"lionview"]; }
テスト実行
テストケースも書けたところで、早速テストを実行します。
テストはコマンドラインまたはショートカットで実行でき、
シミュレータ、実機上にて動作します。
コマンドラインから実行
xcodebuild コマンドで実行します。
Ques.xcworkspace のあるディレクトリへ移動し、以下のコマンドを実行します。
シミュレータで実行する
例えば以下の場合、iPhoneRetina3.5inchモデル / iOS7.0 のシミュレータで、
KIFが走ります。
xcodebuild test -workspace Ques.xcworkspace -scheme Ques -destination “OS=7.0,name=iPhone Retina (3.5-inch)”
実機で確認する場合は、 -destination の name に端末の名前を指定するだけでOKです。
例えば以下のようになります。
xcodebuild test -workspace Ques.xcworkspace -scheme Ques -destination “name=sfumiharu’s iPhone”
ちなみに、-destination は複数定義できたりするので、連続して復数の環境でテストを実行することが可能です。
ショートカットで実行
スキームが Ques であることを確認して、⌘U
テスト実行前に既にシミュレータもしくは実機に Ques がビルドされている場合、削除しましょう。エラーで KIF が走らなかったりします。
Xcodeのコンソールに出力されたテスト結果
2014-04-12 15:40:40.168 Ques[26853:70b] KIFTester loaded Test Suite 'All tests' started at 2014-04-12 06:40:40 +0000 Test Suite 'QuesTests.xctest' started at 2014-04-12 06:40:40 +0000 Test Suite 'QuesKIFTest' started at 2014-04-12 06:40:40 +0000 Test Case '-[QuesKIFTest testShowLionView]' started. Test Case '-[QuesKIFTest testShowLionView]' passed (9.943 seconds). Test Suite 'QuesKIFTest' finished at 2014-04-12 06:40:50 +0000. Executed 1 test, with 0 failures (0 unexpected) in 9.943 (9.943) seconds Test Suite 'QuesTests.xctest' finished at 2014-04-12 06:40:50 +0000. Executed 1 test, with 0 failures (0 unexpected) in 9.943 (9.943) seconds Test Suite 'All tests' finished at 2014-04-12 06:40:50 +0000. Executed 1 test, with 0 failures (0 unexpected) in 9.943 (9.945) seconds
.
.
.
.
1件のコメント
ただいまコメントは受け付けていません。