多くのiOS開発者はユニットテストには精通していますが、Xcodeを使ったUIテストを行なっていない方が多いと思います。自分のアプリに UI テストを導入した際のハイライトと、すべてをテストすることの苦労を共有します。
UI Test の楽しさとメリット
ビジネスロジックとDBのインテグレーション
コードのテストは簡単です。DIでXMLでクラスを設定して、、、
まだUIがなかったのでUIテストを心配する必要はなかったのです
これがテストとの蜜月だったといえるでしょう
ですが5年前変わったといえる
UI開発は謎に包まれた興味のあるものでした
最初にコードを見て、VisualInterfaceと見ることができました。
フロントチームを待たずにアプリケーション全体を書くことができました。 テストに情熱を持っていましたがチームはそうではなかった。
これをテスト、ものとして売ることはできませんでした。
クライアントはお金は払いたくない、ですがコードは維持しなければならない
XCTestはMVCとUIKitを使ってテストしました。
全てがつながっているということでテストが難しくなったわけです。
iOSのテストは諦めてしまいました。私とテストの関係が壊れてしまった
しかしWWDCでUIテストサポートが言われた
ワクワクしてUIテストをしてみましたが、最終的にがっかりしました
バグがたくさんあって、機能がなかった
複雑なコードベース、実際のアプリの中でやることができなかった。
現在Trelloと言うツールを開発しています。 学校テスト結婚式、いろいろなものを調整することができます。
これを保守しなければなりません。テストが重要です。
求めていた価値を見ることができました。
実際UIテストで何をするか
他のチームは何をしているのか Trelloでどうしているか。どう改善できるのか
戦略の前にゴールを決めましょう。
目標はアプリが期待通り動くことを見ていく、その無限に時間があるわけではないので、Trelloでは、現在のテスト戦略を見てどこに乖離が歩かみましょう。
テストには様々なレベルがあります。
ほとんど手動です。
- Xcodeを使ってビルドする
- デバイス上で期待したとおり動くか
- Unit Test としてXCTestをします(834項目)。
- 結合テスト(アプリケーションの中で各テストを見ていき、正しい体験を提供できる)。現行ではほとんど手動です。
- UI Testing テストアカウントで設定して、GUIをテストしていく
- 非常に長いタスクだが様々なタスクを含んでいる。カードを作って開いて編集してチェックリストを使って....モックを使わずにサーバーデータで実際に行っている。これがテストを遅らせるので将来自動化したい。
- Fastlaneでスナップショットを使うこと
- CI PullRequestをまとめる
- QA 担当者が見ていく
- βテスト
- 各リリースで2つのグループを用いる
- プロダクトマネージャーやデザイナーが外部に出す前に確認する
- リリースした後もチームの中の開発者、メンバーがデバイスレベルでテストを行います。
- 各開発者が1台使ってテストする
- Production Testing
- すべてのユーザーに対してアプリケーションを提供していきます
- ユーザーがたくさんいるのでラッキーでした
- フィードバックを受け取ることができる
サポートチケットをもらうと対応できることになる。
可能な限り多くのユーザーにリーチしようとする
Trelloの成長は口コミで広がったのでユーザーをハッピーにすることが大事だと思っている。
統合テスト、リリーステストもUIテストに入る。
ではどういったUIテスト機能がXcodeにあるでしょうか
他のツールも見たが、Xcodeを使うのが適切ということになりました。 全体的にXcodeで使える。チュートリアルをすべて見ました。どのようなUIテストがあるかなど。ボタンのタップやセグエ、エラーハンドリングなど。
とにかく色んなチュートリアルを見ました。
皆さんもやってみていただきたいと思います。 今あるものを見ていきますがこうしたビデオやチュートリアルになり物を見ていきます。
watchOS向けテストはAppleは提供していないし私達もやっていません。
Siriは音声コマンドをStringとして伝えられるので利用できます。 ただし、レコーディングはSiriでは使えません。また文字列を音声の意図として理解しても、続けるためにはマニュアルでボタンを押す必要があります。
alertはアクセスできます。
TransLationはサポートがありません。ラベル文字列をテストしたいというのは難しい。どの言語でも正しく翻訳されているかは大変難しいです。
別の方法でテストするのが良いでしょう。
かなりの問題に直面しました。
一番学んだのはあてにならないということです。
20%がまったく問題ないのの失敗する。
そのためにUIテストをインテグレーションのビルドに入れるのはおすすめしません。個別に夜間プロセスやマニュアルテストで行うのが良いと思います。
リリースごとに改善はされているので最終的には十分な安定性になると楽観視しています。
他のチームがどうしているのかTwitterやSlackなどで聞いてみました。
11チームが何らかのUIテストをしている
また6チームがXcode
ほとんどデベロッパーが書いている。あるいはQA担当者が管理
Kickstartarはオープンソースです。同僚が面白いと教えてくれました
機能の殆どが単体テストで扱えるのでUITestしていない
Java時代を思い出したが、DIなどを使ってテストしやすくしている。
どの言語でもPlaygroundでプレビューを見ることができます。 しかしだいたい均一なアプリのアーキテクチャに依存している。
サンプルアプリをテストする中でPlaygroundにいろんな問題がありました。
PlaygroundはUIと同じで安定しないです。
何ができるか
smokeテストをする、APIのモックを作る、スナップショットテスティング