sos の 作業メモ

プログラミングや英会話学習、マイルや旅行、日常生活など。最近はWebFormなASP.NETのお守りがお仕事です。

日々の生活にhappyをプラスする|ハピタス Gポイント

「Androidアプリ テスト技法」第3章その1

Androidアプリテスト技法

Androidアプリテスト技法

前回の続き

ずいぶん間があきましたが、プラクティスを片付けてこの本も一気に終了させるとします。

3章 Android テスト Tips

ロジックのテスト

JUnit3を使ってロジックのテストを行う。

テストを実行するために大切なことは、ロジックから依存関係を極力なくすこと。 Activityにロジックを埋め込むと、テストを実行するのにActivityまでが必要となる。こういったものはテスト可能な単位に切り出しておくようにする。

Androidでのテストコード

AndroidTestCaseを使って簡単なユニットテストを行ってみる

  • テストクラスはandroid.test.AndroidTestCaseクラスを継承していること(junit.framework.TestCaseのサブクラスであること)
  • テストクラスのアクセス修飾子はpublicであること
  • テストメソッドのアクセス修飾子はpublicであること
  • テストメソッドは戻り値、引数を持たないこと
  • テストメソッド名はtestで始まること

JUnit3が提供するassertメソッド

  • assertEquals 比較対象が等価か(equalsメソッドでの比較)
  • assertNull 比較対象がnullであるか
  • assertNotNull 比較対象がnullでないか
  • assertTrue 比較対象がtrueであるか
  • assertFalse 比較対象がfalseであるか
  • assertSame 同じインスタンスか(==での比較)
  • assertNotSame 違うインスタンスか(!=での比較)
  • fail テストを意図的に失敗させる
MoreAsserts

AndroidSDKには、MoreAssertsという拡張されたクラスがある。配列やコレクション、正規表現の検証も可能な優れもの。

その他の注意

  • 実装した当人であっても、時間の経過とともにテストコードの中身を忘れてしまうので、テストメソッド名やメッセージは適切なものにすること
  • テストクラスはメソッド毎にインスタンスかされる。またテストメソッドの実行順序は保証されない
  • テストメソッドを実行する前の処理はTestCase#setUp(), 後の処理はTestCase#tearDown()をoverrideして記述する
  • 例外をテストするときは、例外の発生を期待する処理をtry~catchで囲み、例外が発生しない時にfailメソッドでテストが失敗するようにする
  • 外部Jarを組込むならlibsの下がよい(ADT17からはlibsの下のライブラリを自動的に依存ライブラリとしてくれるらしい)。libs以外の場所にライブラリを追加した場合は、Java Build Pathでexportの指定を追加する必要がある

Androidのテストに関しては公式のこの辺と、和訳のこの辺が参考になりました。

ざっとクラスを眺めてみましたがいろいろあります。

テストケースクラス

  • AndroidTestCase - 汎用のテストケースクラス
  • ApplicationTestCase - Applicationオブジェクトのテストケースクラス
  • InstrumentationTestCase - テストケースの中でInsturumentationメソッドを使用する場合に使う

アサーションクラス

  • Assert - 比較テストに失敗した時にassertionを投げるクラス
  • MoreAsserts - 配列やコレクション、正規表現でマッチングを行うassertionが含まれている
  • ViewAsserts - ビューに関するassertionで役立つ

モックオブジェクトクラス

Context,ContentProvider,ContentResolver,Serviceといったシステムのモックオブジェクトを提供している

  • MockContentResolver
  • MockContext
  • MockContentProvider
  • MockCursor
  • MockDialogInterface
  • MockPackageManager
  • MockResources

テスト用Context

Androidは便利な2つのcontextクラスを提供している

  • IsolatedContext
  • RenamingDelegatingContext

JUnitもちゃんと勉強したかったので↓をポチってみましたが読む暇あるかな・・

JUnit実践入門 ~体系的に学ぶユニットテストの技法 (WEB+DB PRESS plus)

JUnit実践入門 ~体系的に学ぶユニットテストの技法 (WEB+DB PRESS plus)

次回へ続く