はじめまして。SWETの外山(@sumio_tym)です。
2018年1月よりSWETで働いています!
どうぞよろしくお願いします!
さて、2018年2月8日(木)から2日間にわたって開催されたDroidKaigi 2018の参加レポートをお届けします。
DroidKaigi 2018では、私達DeNA SWETグループからも、私を含めて3名が登壇しました!
このエントリでは、SWETらしく、テスティングに関係するセッションを以下の2つに分けてご紹介します。
- DeNA SWETメンバーによる発表
- DeNA以外の方による発表
DeNA SWETメンバーによる発表
Androidで利用できるデバイスファームのメリット・デメリットの紹介
duckさんによる発表です。
サーバーで集中的に管理されたAndroid端末を、遠隔操作・テストできる「デバイスファーム」について、 以下の観点で比較していました。
- 端末を操作できるか?
- 自動テストで何が動かせるか?
- 利用者がテストを用意しなくても良い「モンキーテスト」ができるか?
- adbで接続できる「ダイレクトアクセス」ができるか?
- CI/CDと連携可能か?
また、最後に、以下の点を強調していたのが印象的でした。
「必ず、無料枠で、自分達の業務に適用できるか試してみること」
デバイスファーム選びの参考にしてみてください。
UIテストの実行時間を短縮させる方法
tarappoさんによる発表です。
前半では、UIの自動テストに関する以下の点について、具体例を挙げながら解説していました。
- テスト実行時間が増加しやすい要因
- テスト実行時間増加により引き起こされる問題
後半では、実行時間短縮のために必要な、以下のプラクティスを解説していました。
- 無駄にUIの自動テストを増やさない
sleep
の利用を減らす- 事前にテストアセットを用意する
- テストを実行させる端末の種類を減らす
- テストケースを分割して、テストの実行を並列化する
特に、単純な並列化だけではスケールしない場合に、 ボトルネックを特定しつつ更に並列度を上げていく過程はとても参考になると思います。
Espressoテストコードの同期処理を究める
外山の発表です。
AndroidのUIテストツールEspressoを使っていると、 テスト対象アプリのUI更新の完了を待てずに失敗することがあります。
その問題を解決するために必要なIdlingResource
についての知識や、
UI Automatorを併用してUI更新完了を待ち合わせる方法について説明しました。
独自の非同期処理機構を持つRxJavaなどを採用しているアプリでは、Espressoによるテストの失敗頻度が高くなります。 そのようなときに、この発表を参考にして、失敗しないEspressoテストに書き換えてみてください。
また、外山が過去のDroidKaigiで発表した以下の内容も役に立つと思います。あわせて参照してみてください。
- 「変更に強いEspressoテストコードを効率良く書こう」(DroidKaigi 2017)
- 「生まれ変わったUI Automatorを使いこなす」(DroidKaigi 2016)
DeNA以外の方による発表
はじめてのUnit Test
@fushiroyamaさんによるハンズオンです。 自分のEspressoの発表と時間が重なっていたため、参加は叶わなかったのですが、スライドを読むだけでも参考になります。
このスライドでは、AndroidのLocal Unit Testを書くのに必要な知識が、MockitoやRobolectricの使い方も含めて丁寧に解説されています。
ハンズオンに利用するソースコードも公開されていますので、 AndroidのLocal Unit Testに入門したい方はチャレンジしてみると良いと思います。
How to improve your MVP architecture and tests
kiriminさんによる発表です。
MVPアーキテクチャを採用したアプリにおいて、Presenter部分をテストする方法を解説する内容でした。
- MVP採用時にありがちなアンチパターンの解説
- 正しくViewとPresenterを分離し、Mockitoを使ってテストを書く方法
が丁寧に説明されており、具体的でとても分かりやすい内容でした。
MVPアーキテクチャを採用するときはもちろん、そうでないときでも、 Androidのユニットテストを書くときの参考にすると良いと感じました。
Moving Forward with JUnit 5
Marcel Schnelleさんによる発表です。
JUnit4が抱えている問題の説明から始まり、以下のような流れで解説していました。
- それがJUnit5でどのように解決されているのか
- JUnit4と5の違い
- Junit5の新機能
- 発表者ご本人作の、AndroidでJUnit5を使えるようにするGradleプラグイン
このGradleプラグインはAndroid Test Night #1でも少し話題になっていました。
当時はLocal Unit Testしかサポートしていませんでしたが、 現在ではInstrumented Testもサポートしている(Experimental)とのことです。
AndroidでJUnit4が使えるようになるまでは長い時間が必要でしたが、JUnit5は案外すぐに使えるようになるかも知れません。 今後が楽しみですね!
おわりに
DroidKaigi 2018のセッションのうち、テスティングに関係するものをご紹介しました。
SWETグループでは、DroidKaigiでの登壇に限らず、積極的に対外的なアウトプットを行っています。 加えて、SWETグループ主催の勉強会である、Android Test NightやiOS Test Nightも開催していますので、ご興味の有る方は是非ご参加ください。
また、SWETグループではAndroidに限らずテストの自動化やCI/CDに興味があり、私達と一緒に働いてくれる仲間を募集しています。ご応募お待ちしています!