高畑 匡秀

2013.11.27

robotiumのwaitForメソッドがすごく便利だった

Androidアプリ担当の高畑です。
社内でぷよぷよテクニックを披露したら軽く引かれました。ショックです。
ぷよぷよのおじゃまぷよを消すのは得意ですが、お腹のおじゃまぷよはなかなか消せません。

今回のブログネタですが、robotiumについて書こうと思います。
知っている人にとっては今さらrobotium?って感じかもしれませんが、僕は最近初めて使ってみました。
そして、robotiumのwaitForメソッド系が何かと便利だったのでそれに重点を置いて書いていきます。

robotium準備

こちらからrobotiumのライブラリをダウンロードします。

後はテストプロジェクトにrobotium.jarをビルドパスを通すだけで使用準備は完了です。
導入は非常に手軽です。
後はInstrumentationTestCase2で以下のように書くだけでセットアップは完了です。

waitForメソッドシリーズ

冒頭でも触れたのですがrobotiumには便利なwaitForメソッドがあります。
サンプルソースに移る前にどんなものかをいくつかピックアップして紹介します。

waitForActivity

引数にクラス名とタイムアウト時間を渡すと指定した時間内に指定したActivityが表示されるかを判定します。

waitForFragmentById

引数にレイアウトのIDを指定します。
指定したレイアウトIDにFragmentが指定時間内に追加されているかを判定します。

waitForFragmentByTag

引数にFragmentのタグ名を指定します。
指定したタグ名のFragmentが指定時間内に追加されているかを判定します。

waitForFragment系を使う時はandroid-support-v4.jarが必要になるので注意してください。

waitForText

引数にした文字列が時間内に表示されているかを判定します。

waitForCondition

なんでもありのwaiForメソッド
引数にConditionを指定する。指定したConditionになるかを判定します。

その他のwaitForメソッド

waitForDialogToOpen
waitForDialogToClose
waitForView
waitForLogMessage
など色々ありますが、どれも基本的に使い方は同じです。

サンプルソース

robotiumでテストするための簡単なサンプルを用意します。
Activityを2ファイルと
Fragmentを2ファイル用意しました。

まず始めにメインとなる画面です。
onCreateでListFragmentを追加するのと
ボタンのクリックでFragmentを入れ替える機能を持っています。

次にSampleActivityに紐づけるFragmentです。
ただのListFragmentです。
ItemをクリックするとNextActivityに選択した文字列を渡して画面遷移します。

もうひとつのFragmentはGridViewを表示するFragmentです。
データはどこからダウンロードしてくると仮定して、非同期取得してGridViewに反映させます。
SampleListFragmentと同様に、Itemを選択するとNextActivityに選択した文字列を渡して遷移します。

最後にNextActivityです。
intentで文字列を受け取って、非同期で取得した文字列と連結させて表示します。

サンプルのテストソース

いよいよrobotiumを使ったInstrumentTestです。
waitForメソッドの返却値はboolean型なので
assertTrueと絡めるとスッキリします。

どんな動作や確認をしているかはコメントから読み取ってください。

最後に

テストコードを書くためにソースコードが多くなってしまったので
今回のサンプルプロジェクトをgithubにあげておきました。
今回のブログ結局何を言いたかったのかというとwaitForメソッドを使えば、非同期処理でガチガチのアプリでも
シンプルにInstrumentTestが書けるということです。