Session

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テストを自力で修正できるようになることを目指したいと思います。

Sumio Toyama

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

View Speaker Profile