Sumio TOYAMA

Sumio TOYAMA

テスト自動化が好きなAndroidエンジニア

Androidアプリのテスト自動化に興味を持っているエンジニアです。「Androidテスト全書」執筆。
DeNAのSWETグループで、Android関連プロジェクトへの自動テスト導入などを行っています。

  swet.dena.com (company)
  github.com/sumio (GitHub)

Current sessions

EspressoのテストをAndroidの最新トレンドに対応させよう

Androidを取り巻く状況はこの2年間で大きく変化しています。例えば次のような変化がありました。

・Android関連パッケージのAndroidX (Jetpack)への再編
・記述言語のKotlinへのシフト
・Android Architecture Components(AAC)の浸透

このめまぐるしい変化にEspressoのテストコードも対応していかなければなりません。
本セッションでは、最新トレンドに対応したEspressoのテストが書けるようになることを目標に、次のトピックを紹介します。

・EspressoをAndroidX対応にする
・EspressoをKotlin対応にする
 ・Espresso Test Recorderを使ってKotlinで記録する
 ・変更に強くするためにKotlinでPage Objectデザインパターンを適用する
・AACを採用したアプリに対するEspressoテストの注意点

また、2018年後半に公開が予定されているProject Nitrogen導入に伴う変化についても(具体的な公開時期や発表時間の制約によりますが)可能であれば紹介したいと考えています。

本セッションの内容を学んで、UIテストコードもAndroidの最新潮流に乗り遅れないようにしましょう!


Espressoテストコードの同期処理を究める

■対象者
・Espressoで自動テストを書いてみたものの、不安定なテストが多くて困っている方
・Espressoでテストを自動化する範囲をより広げて行きたい方

■概要
AndroidのUIテストツールであるEspressoの特徴の1つに、
「UI操作に関する同期(待ち合わせ)処理を自動的にやってくれる」
というものがあります。
公式ドキュメントによると、この自動同期機能の恩恵により、
テストコードで明示的にwait/sleep/pollingを書く必要がなくなる、とも書かれています。

ところが、RxJavaなどの非同期処理を主体としたフレームワークが広く採用されるようになってから、Espressoの自動同期機能がうまくいかず、UIが更新される前に次の操作が実行されてしまい、テストが失敗するケースに直面することが多くなってきました。

皆さんの中にも、UI更新の待ち合わせがうまく行かず、その場しのぎにsleepを挿入した経験の有る方がいらっしゃるのではないでしょうか?

このセッションでは、Espressoの自動同期処理が何をしてくれるものなのか?
Espressoの自動同期処理でうまく行かないときにどうすれば良いのか?
という疑問を解決すべく、最新のEspresso 3.xの実装にもとづいて、以下の内容について解説します。

・Espressoが提供する自動同期機能が保証してくれること・くれないこと
・Espressoの同期処理をカスタマイズするIdlingResource APIの概要
・Espressoが提供しているIdlingResource実装の紹介と、その使い道
(一例として、RxJavaの非同期処理を待ち合わせる方法も紹介します)
・最後の手段: IdlingResourceを使わずに、簡単に同期を取る方法

このセッションを聴いた方が、
タイミングによって失敗してしまうような、
不安定なEspressoテストを自力で修正できるようになることを目指したいと思います。


Past and future events

DroidKaigi 2019

6 Feb 2019 - 7 Feb 2019
Tokyo, Japan

DroidKaigi 2018

7 Feb 2018 - 8 Feb 2018

DroidKaigi 2017

「変更に強いEspressoテストコードを効率良く書こう」
https://droidkaigi.github.io/2017/timetable.html#session-26
9 Mar 2017 - 10 Mar 2017
Tokyo, Japan

DroidKaigi 2016

「生まれ変わったUI Automatorを使いこなす」
https://droidkaigi.github.io/2016/timetable.html#session-2016-02-19-11-30-12-00-b
18 Feb 2016 - 19 Feb 2016
Tokyo, Japan