AndroidTestCaseとモックを使ってテストを書く
Androidからサーバアプリにアクセスするようなアプリを開発する場合、テスト用のサーバと本番用のサーバの設定を変更したいことがよくあります。AndroidTestCaseとモックオブジェクトを利用すると、テスト実行時に利用するリソースファイルを切り替えることも可能です。今回は、サーバへの接続情報を取得クラスに対するテストを記述していきます。
サンプルプロジェクト「BusinessLogicSample」
ここでは、テスト対象プロジェクトとして「BusinessLogicSample」を用意しました。このプロジェクトを利用してテストを書いていくことにしましょう。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
SecretResources.javaは「config.properties」からサーバへの接続情報を読み込んで保持するクラスです。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
config.propertiesにはサーバへの接続情報が設定されています。
テストプロジェクトに以下のファイルを作成します。
- プロジェクト名:BusinessLogicSampleTest
- ファイルの場所:src/com/example/atec/business/SecretResourceTest.java
AndroidTestCaseを拡張
まず、ServerConfigTestクラスを作成します。このクラスはAndroidTestCaseを拡張させます。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
モックのリソースクラスを定義
config.propertiesファイルを読み込む代わりに、テスト中で定義した文字列をInputStreamとして返すよう実装します。「MockResources」の拡張クラスTestResourcesは、例外を投げるだけなので、ここで必要なopenRawResources()だけをオーバーライドして使用します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
モックのコンテキストクラスを定義
先ほど定義したモックのリソースクラスを返すコンテキストを実装します。「MockContext」クラスの拡張クラスも例外を投げるだけとなっています。テストで必要なgetResources()のみオーバーライドします。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
さらに、setContext()を利用してモックのコンテキストを設定します。ここではsetUp()メソッド内でモックコンテキストを設定し、テストメソッドでgetContext()を呼び出すことでモックのコンテキストを取得しています。
テスト実行
そして、テストメソッドを記述し、TestResourcesで定義した値が取得できているかテストします。 「twitter.consumer=11111」「twitter.secret=22222」が期待値となりますので、テスト結果が同様の値となればテストは成功です。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
テストを実行し、グリーンーバーが表示されるかを確認します。
モックオブジェクトを使う利点
このようにモックオブジェクトを利用すると、実際にアプリを動かす場合とテストを実行する場合で環境を切り替えたい場合に、テスト対象プロジェクトのソースコードなどを変えることなくテスト用の環境に切り替えることができます。
コラム Twitterクライアントに対するテスト「testter」
このサンプルは、テスト部で作成している「testter」というTwitterクライアントに対するテストから抜粋したものです。
testterはテスト部でテストを書く対象のために作成したAndroidアプリです。ソースコードも公開されていますのでぜひ1度ご覧ください。
次回は、UIのテストケースの書き方
さて、今回のビジネスロジックのテストはいかがだったでしょうか。ビジネスロジックのテストケースを記述することで、ビジネスロジックがAndroid固有のコンポーネントから自然と分離されるようになります。そうすると、記述が面倒なAndroid固有のコンポーネントにかかわる処理のテストケースが自然と減ります。ぜひAndroidアプリのビジネスロジックテストを自動化してみてください。
また、本稿で掲載したソースコードは以下のリポジトリで公開されています。
- https://atec.googlecode.com/svn/atmarkit/businesslogic/trunk/BusinessLogicSample
- https://atec.googlecode.com/svn/atmarkit/businesslogic/trunk/BusinessLogicSampleTest
次回は、Androidテスト部で議論にのぼることが多いUIのテストケースの書き方について解説します。ご期待ください。
著者紹介
宮田友美
株式会社オープンストリームにおいて、アーキテクトとしてAndroidの調査・研究および案件支援に従事。趣味はAndroid系端末をはじめとしたガジェット収集。しかし最近は、心踊るガジェットが最近あまり発売されないのが悩みの種
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- 今日から始める! Androidケータイアプリ作成の基礎
いまこそ知っておきたい「Androidアプリ」とは - 売れるスマホアプリを目指せ! テスト達人への道
安藤幸央のランダウン(56) - 単体テストを“神速”化するQuick JUnitとMockito
ユカイ、ツーカイ、カイハツ環境!(16) - JUnit/FindBugs/PMDなどを総観できるQALab/Limy
ユカイ、ツーカイ、カイハツ環境!(8) - 次世代テストフレームワークでテストを変える
- Eclipseで使えるテストツールカタログ
- イチから始める!Androidセキュリティ
- Androidセキュリティの今、これから