初めまして!開発チームでQAエンジニアを担当している黒川と申します。
今回はXCUITestでテストを書いた後、シュミレーターでテストを実行する前に設定しておくと便利な設定を紹介します。
- テストで使用する言語を固定する
- シュミレーターでキーボードを表示するように固定する
テストで使用する言語を固定する
なぜ便利なのか
UIテストを実行する時にシュミレーターの言語設定が意図しない言語になっていてテストが落ちるということがありますが、後述の設定を行うことで、テストで使用する言語を事前に固定出来るため、問題を回避することができます。
※シュミレーター自体の端末設定画面(↑の画像)から言語を変更することで使用したい言語でテストを実施することはできますが、シュミレーターを変更した時には引き継がれません。
設定方法
シュミレーターでアプリを起動する時に使用する言語をXcodeで設定する。
- Xcodeから EditSchemeを選択
- Testを選択
- OptionsのApp Languageに設定したい言語を設定する
注意点
テスト実行時にのみ反映される設定のため、テストを終了させた後はシュミレーター自体に設定されている言語に戻ります。
シュミレーターでキーボードを表示するように固定する
なぜ便利なのか
キーボードの表示設定によりシュミレーターにキーボードが表示されず文字入力が出来なくてテストが落ちるということがありますが、後述の設定を行うことで、テスト実行時のキーボード表示設定を意図した状態に固定できるため、問題を回避することができます。
実施に問題が起きたテスト例
ユーザー名登録画面などのテストをシュミレーターで動かした時、以下箇所のtypeText実行時にテストが落ちました。
func typeUserName(_ name: String) -> Self { XCTContext.runActivity(named: "ユーザーを入力") { _ in userNameField.tap() userNameField.typeText("黒川です") } return self }
キーボード表示設定とは
Connect Hardware Keyboardにチェックが付いている状態では、接続しているハードウェアのキーボードがシュミレーターで認識されて(自分の環境ではMacのキーボードでした)ソフトウェア(シュミレーター)側のキーボードが表示されなくなるため、テスト実行時にキーボードが表示されないという問題が発生します。
※Connect Hardware Keyboardのチェックを外せば取り敢えずテストは落ちなくなりますが、CI環境/自分以外がテストを実行した時/シュミレーターを変更した時などで同様の問題が発生する可能性があります。
設定方法
テスト実行時に使用するシュミレーターのキーボード表示設定をXcodeから設定する。
- Xcodeから EditSchemeを選択
- Testの「∨」からメニューを表示してPre-actionsを選択
- Run Scriptで以下を入力する
## 設定を反映させるために一度シュミレーターをキルします。 killall Simulator ## Connect Hardware Keyboardのチェックを外した状態に指定しています。 defaults write com.apple.iphonesimulator ConnectHardwareKeyboard -bool false
さいごに
UIテスト導入を決めてコードを書いていざ実行した時、テストコードは問題ないはずなのに本記事の箇所でテストが通らなくて解決するのに時間が取られてしまいました。 本記事がこれからUIテストの導入を考えている方々に少しでもお役に立てればと思います!
nana musicでは、iOSのテストコードを一緒に書いてくれる/自動化を進めてくれる仲間を募集しております! 是非、ご応募をお待ちしております。