高畑 匡秀

2013.02.07

Androidでmockitoを使ってActivityをテストする

あいさつ

高畑です。最近何も考えずにソースコードを書き始めると怒られます・・・
高畑です。なぜかif文を書くと土下座しろと怒られます・・・
高畑です・・・高畑です・・・高畑です・・・

というわけで、お久しぶりです高畑です。
今回はAndroidのActivityのライフサイクルをテストするサンプルを紹介したいと思います。

Androidの自動テストについて

まず、Activityのテストの説明の前にAndroidの自動テストについて簡単に説明します。
大雑把に分けてAndroidの自動テストには以下の三つがあります。

テストケース

説明

mock

ActivityInstrumentationTestCase2

UIの動作も含めたテストを行う

×

InstrumentationTestCase

クラスの単体テスト

ActivityUnitTestCase

Activity単体のテスト

今回説明するのは3番目のActivityの単体テストです。
2番目のInstrumentationTestCaseでクラスの単体テストを行う方法はこちらを参考にしてください。

準備

今回は単体テストを通すためのmockとしてmockitoを使います。
mockitoとは、Javaの開発でよく利用される、シンプルかつ強力なmockライブラリです。
Androidの開発でmockitoを使うためにはmockitoのライブラリを単にクラスパスに追加するだけでは動いてくれないので、dexmakerというライブラリを使用します。

dexmakerとは

android junit testでmockitoを使うためのサポートクラスが入っているとこちらに書いてあります。
mockitoだけでもコンパイルは通るのですが、実際にmockitoを使うとExceptionが発生してしまうので、dexmarkerの追加は必ず必要になります。

実際にmockitoを導入する手順は以下になります
1.dexmakerのサイトからdexmaker-1.0.jarとdexmaker-mockito-1.0.jarをダウンロードする
2.mockitoのサイトからmockitoをダウンロードする
3.ダウンロードしてきたjarをAndroidテストプロジェクトのライブラリに追加する
以上で準備は完了です。

テスト対象となるActivityのサンプルソース

このActivityはintentでArrayListを受け取って、各ライフサイクルでTextViewにArrayListから取得した文字列をセットするのとonClickリスナーを実装したActivityです。
詳しくはソース中のコメントに記載していますのでご覧ください。

なんとも適当なActivityですが、このAcitivityの
onCreate(),onStart(),onResume(),onClick()についてのテストコードを書いてみます。

テストコード

こちらはActivityをテストするコードになります。
mockitoの使い方を簡単に説明すると
ArrayList mockList = mock(ArrayList.class);と書くことでクラスのmockオブジェクトを作成できます。
doReturn(“hoge”).when(mockList).get(0);と書くことでメソッドのスタブを作成できます。
この場合、mockListのget(0)が呼ばれた場合、”hoge”という文字列を返却することになります。
verify(mockList).get(0);と書くことでmockList.get(0)が呼ばれたことを確認します。
mockitoの詳しい使い方はこちらをご覧ください。

後はAndroid JUnit Testを実行すれば、問題なくテストが通るはずです。

以上でAndroidでmockitoを使ったActivityの単体テストの説明は終了です。
この勢いでActivityInstrumentationTestCase2についても機会があれば書いてみたいですね。