【Xcode】XCUITest + fastlane/snapshotで始めるUIテスト(前編)
前編では、XCUITestを導入してUITestを実行してみます。
XCUITestとは
Xcode7から追加されたUIテスト機能です。
UIテストをするためのフレームワークはEarlGreyやappiumなどもありますが、
iOS8以降対応で問題なければ、XCUITestが扱いやすいと思います。
開発環境
- Mac OS Sierra
- Xcode8.3
- Swift3
導入手順
1. UI Testing Bundleを追加する
UITestを追加したいプロジェクトを開き、メニューの File > New > Target... を選択します。
iOS > Test > "iOS UI Testing Bundle" を選択して Next を押します。
Product Name を入力して Finish を押します。
(新規プロジェクトの場合は、作成時にプロジェクト名などを入力する画面で "Inclure UI Tests" にチェックを入れればOK)
2. テスト対象となる機能を作成する(すでにある場合は次へ)
今回はテスト用なので、テキストフィールドに文字を入力して決定ボタンを押すと
入力内容がアラートで表示される機能にしました。
3. Accessibility identiferを設定する(すでにある場合は次へ)
テストコードからコントロールにアクセスするために、Accessibility identiferを設定します。
コードから追加する方法もありますが、ここではIBを開いてコントロールを選び、右側のペインの
Identity inspector(左から3番目) > Accessibility > identifer
に一意の文字列を設定します。
※Accessibility identiferが保存されない場合※
稀にAccessibility identiferを設定しても、実行時に保存されていないことがあります。
その場合、Accessibility identifer設定後に、座標やサイズなどレイアウト情報を変更すると保存されました。
(おそらくXcodeのバグ。保存されたあとはレイアウト情報は戻して大丈夫です。)
4. テストコードを作成する
先程追加したUITestTarget内のswiftファイルにテストコードを書きます。
(デフォルトでは"[ProjectName]UITests.swift"というファイル名になっていると思います。)
初期状態で「testExample()」というメソッドが作成されていますが、
このように「test〜」で始まるメソッドがテスト時に実行されるコードになります。
testExample()内にテストコードを作成します。
"textField"、"decisionButton"は先程設定したAccessibility identiferです。
func testExample() { let app = XCUIApplication() // 文字を入力 let textField = app.textFields["textField"] textField.tap() textField.typeText("UIテストを実行") // 決定ボタンをタップ let button = app.buttons["decisionButton"] button.tap() // 入力内容がアラートに表示される }
5. テストを実行する
メニューの Product > Test を選択するか、テストメソッド名の左側の◇ボタンを押してテストを実行します。
◇ボタンが緑色になれば成功、赤くなれば失敗です。