DroidKaigi 2017のトーク「変更に強いEspressoテストコードを効率良く書こう」 で利用予定のサンプルアプリです。
- Qiitaの最新の投稿を20件取得してリスト表示します。
- リスト表示された記事のうち、好きなものをを「お気に入り」に登録することができます。
- 「お気に入り」に登録した記事は「Local Favorites」メニューから確認することができます。
- このアプリで登録した「お気に入り」は永続化されません。アプリを終了すると消去されます。
- Qiitaの「アプリケーション設定」のページで、「個人用アクセストークン」を発行します。
- 発行したアクセストークンを、
local.properties
のapiKey
プロパティに設定してください。 - Android Studio 2.3でインポートし、ビルドしてください。
当日の発表で実演したときのテストコードをapp/src/androidTest
配下に配置しています。
実演内容を見直してみたいときに活用してください。
※ デモシナリオに沿って、事前に作成したものなので、実演内容とは一部異なる箇所があります。
Step1.java
: 操作・検証内容を、Espresso Test Recorderを使って記録した直後のものです。 当日スライドpp. 60-64に対応します。Step2.java
: Step1で記録した内容で、そのままでは動作しない箇所を手直ししたものです。 当日スライドpp. 67-70に対応します。Step3.java
: Step2で手直しした内容を元に、メソッド抽出したものです。 当日スライドp. 71に対応します。Step4.java
: Step3で抽出したメソッドを使って、テストケースを実装したものです。 当日スライドp. 72に対応します。
その他、jp.jun_nama.espresso.commons
パッケージに、補助的なクラスを用意していますので、あわせて活用してください。
RecyclerViewUtils.java
: 当日スライドpp. 67-69で紹介したユーティリティメソッドを定義しています。RxEspressoTestRunner.java
: 当日スライドp. 73の③で紹介した、RxJava1のSchedulers.io()
をAsyncTask
のスレッドプールに差し替えることで、Espressoの非同期待ち合わせを実現するサンプルです。この方法を利用する場合は、以下の点に注意してください。- RxJava2では、
RxJavaHooks
クラスが存在しないため、このままでは動作しません。 代わりにRxJavaPlugins
クラスを使えば、同様な方法で実現できると思います。 - カスタムテストランナーとして実装されているため、
build.gradle
のtestInstrumentationRunner
を修正する必要があります。 - RxJavaで、
Schedulers.computation()
などの、メインスレッドでもSchedulers.io()
でもないスケジューラを使っている場合は、そのままでは動作しないと思われます。
利用している全てのスケジューラのスレッドプールを、同様な方法でAsyncTask
のスレッドプールに差し替えることで対応できる可能性があります。 - このクラスは、Joshua Kovach氏によるブログ記事「Retrofitting Espresso」で紹介されている、Kotlinで書かれたサンプルコードを参考に、Javaで実装し直したものです。
- RxJava2では、
MoreViewMatchers.java
: 当日スライドp. 46で紹介した、Espresso Test Recorderのバグ(Issue 231461)を回避したchildAtPosition()
メソッドの実装です。
Copyright 2017 TOYAMA Sumio <[email protected]>
Licensed under the
Apache License, Version 2.0.