スキップしてメイン コンテンツに移動

EspressoでのRecyclerViewのテスト


RecyclerViewもAdapterを扱うのでListViewの時のようにonDataを使うのかと思ったら違うようなのでメモしておきます。ここでは、RecyclerViewでテキストのリストを表示するようなプロダクトコードのテストを想定しています。

環境

  • Android Studio 2.1.1
  • compileSdkVersion 23
その他build.gradleで扱ってるライブラリのバージョン等は下記に記載しています。

テキストが表示されてるか確認

RecyclerView上の任意のTextViewに表示されている文字列を確認するコードです。RecyclerViewではonViewを扱います。

onView(withId(R.id.recyclerView))
        .check(matches(hasDescendant(withText("hogehoge"))));

指定行をクリック

positionが1の行(ViewHolder)をクリックするコードです。

onView(withId(R.id.recyclerView)).perform(
            RecyclerViewActions.actionOnItemAtPosition(1, click()));

このRecyclerViewActionsを扱うにはbuild.gradleのespresso-coreの代わりにespresso-contribを記述してやる必要があるのですが、依存関係でエラーが出て難儀しました。うまくいったdependenciesは以下の通り(余計なものも含まれてます)


指定行の子Viewをクリック

上記を応用します。click()の部分をカスタムViewActionに置き換えます。


テストはこんな感じで

onView(withId(R.id.recyclerView)).perform(
        RecyclerViewActions.actionOnItemAtPosition(1,
                MyViewAction.clickChildViewWithId(R.id.imageButton)));

position1番目に入ってるImageViewをクリックしています。

ちなみに、RecyclerView.AdapterでviewTypeを切り替えてHeader等入れる実装をしていると、position 0にHeaderが入ってるの忘れがちです。

リストの並びを確認する場合

RecyclerViewのどのpositionにどのデータが入ってるか確認したい場合です。こちらがとても参考になります。

こちらを補足するとテストではこんな感じ記述します。


viewTypeを切り替えてHeaderを扱うようなAdapterでItemのデータと関係ない独立したHeaderを設置するような実装だと注意が必要です。

RecyclerViewInteractionクラス内のfor文ではitemsのサイズで回しているの対して、RecyclerItemViewAssertionではViewHolderのpositionを参照しているからです。もっと綺麗なやり方あると思いますが、とりあえず思いついた少ない記述での修正だとこんな感じでしょうか。


RecyclerViewInteractionにstartPositionというパラメータを増やしてます。これに1を指定することでRecyclerViewのViewHolderは1番目からチェックされます。

参考

コメント

このブログの人気の投稿

Javaでprivateなfieldやmethodにアクセスする

JUnitでテストしてると、privateなフィールドにアクセスして、値を参照したりセットしたりしたくなるわけですが、よく使うのでメモしておきます。 例えば、次のような対象のクラスがあるとします。 public class ParentClass { private String hoge = "ParentClass!!"; public void dispMsg() { System.out.println("dispMsg:" + hoge); } private void privateDispMsg(String msg) { System.out.println("dispMsg:" + msg); } }

GolangでWindows GUIアプリケーション

GUIアプリ作成の前提 社内ツールとしてexeで配布 開発環境はGoLandを使う 社内ツールとしてexeを配布ということであれば、Visual StudioでC#による開発だと思います。しかしながら、Go言語を習得したいのと、GoLandの補完機能が便利で、Android Studio使っていたこともあり、とっつきやすいという点からGo縛りでGUIアプリケーションを考えたいと思います。 lxn/walk Windows application library kit for Go. Windows向けしか考えていないので、まずこのライブラリなのですが、ボタンやコンボボックスが思ったように並ばなかったり、手軽にイメージボタンを配置したりなど、簡単にレイアウトを変更できない課題に直面しました。レイアウト作成だけで時間を取られてしまいます。そう言えば、Androidアプリ開発のときは、XMLでデザイン部分を切り離してたのを思い出して、今回の調査の運びとなりました。 fyne-io/fyne Cross platform native GUIs designed for Go based on Material Design. Supports: Linux, macOS, Windows, BSD, iOS and Android. walkと比べると、クロスプラットフォームで作成できるのですが、こちらもコードの中にデザインを書いていく形でした。 therecipe/qt therecipe/qt allows you to write Qt applications entirely in Go or JavaScript. Qt Creatorなるものがあるようで、デザイン部分を切り離せる印象はあるものの、最新のPCでもビルドに時間がかかるようで、学習コストもかかるという記事を見かけて断念しました。 どうしたものかとツイートしましたら、下記のようにご助言をいただいた。 同じ課題に対し色々試した結果、PWAのフルキャッシュドに落ち着いた。中身はGo+WASMで。 https://t.co/e60whDTV16 — のぼのぼ📡 (@nobonobo) July 21, 2020 PWA 早速調べてみました。Googleが進めているプロジェクトで、ネイティブアプリのよ

Eclipseの高速化メモ

Eclipseが重いと一言に言っても、いろいろな工程での話があると思いますが、過去記事のなども含めてこの記事にピックアップしておきたいと思います。以下はWindows環境での話です。