まず、developer.android.com にあるアプリをテストするをご覧ください。プラットフォーム テストにおけるインストルメンテーション テストは、いくつかの点で使い方が異なります。
インストルメンテーション テストは、am instrument
コマンドによって起動される特別なテスト実行環境です。この環境でターゲット アプリケーション プロセスが再起動され、基本アプリケーション コンテキストで初期化されて、アプリケーション プロセス VM 内でインストルメンテーション スレッドが起動されます。テストコードはこのインストルメンテーション スレッドで実行が開始され、Instrumentation
インスタンスが付属しています。このインスタンスは、アプリケーション コンテキストへのアクセスを可能にし、テスト中のアプリケーション プロセスを操作する API を提供します。
主な概念
- アプリケーション パッケージでインストルメンテーションを宣言する必要があります。このとき、アプリケーション パッケージ マニフェストの
<manifest>
タグ下に<instrumentation>
タグをネストします。 - 技術的にはアプリケーション パッケージ マニフェストに複数の
<instrumentation>
タグを含めることも可能ですが、一般的な方法ではありません。 - 各
<instrumentation>
には、次のものが含まれている必要があります。android:name
属性: テスト アプリケーションに含まれるInstrumentation
のサブクラスの名前です。通常は使用中のテストランナーです(例:android.support.test.runner.AndroidJUnitRunner
)。android:targetPackage
属性: テスト対象のアプリケーション パッケージです。定義する必要があります。
ステップの概要
一般的にフレームワーク サービスに対する目的の密閉型テストは次のとおりです。
frameworks/base/core/tests/coretests frameworks/base/services/tests/servicestests
コンポーネントに新しいインストゥルメンテーション モジュールを追加する場合、以下をご覧ください。
上記のいずれかの場所にテストを追加する場合、既存の規則に従います。新しいテスト モジュールを設定する場合は、上記のいずれかの場所にある
AndroidManifest.xml
とAndroid.mk
のセットアップに従います。frameworks/base/core/tests/coretests/ の例をご覧ください。 以下の行により、追加のアプリがインストールされますので、ご注意ください。
<option name="test-file-name" value="FrameworksCoreTests.apk" /> <option name="test-file-name" value="BstatsTestApp.apk" />
必ず、
@SmallTest
、@MediumTest
、@LargeTest
のいずれかとしてテストをマークしてください。テスト モジュールを m でビルドします。例:
m FrameworksCoreTests
テストを実施します。
最も簡単な方法は、次のように Atest を使用することです。
atest FrameworksCoreTests
より複雑なテストの場合、Trade Federation テストハーネスを使用します。
m tradefed-all tradefed.sh run template/local_min --template:map test=FrameworksCoreTests
Tradefed を使用しない場合、テストを手動でインストールして実行します。
- 生成された apk をインストールします。
adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
さまざまなオプションを指定してテストを実行します。
apk 内のすべてのテスト
adb shell am instrument -w com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
特定の Java パッケージ下のすべてのテスト
adb shell am instrument -w -e package android.animation \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
特定のクラス下のすべてのテスト
adb shell am instrument -w -e class \ android.animation.AnimatorSetEventsTest \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
特定のテスト方法
adb shell am instrument -w -e class \ android.animation.AnimatorSetEventsTest#testCancel \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
テストでは、JUnit
API を使用して、合格または不合格に関する明示的なアサーションを作成できます。また、例外がキャッチされない場合も、機能的な失敗が発生します。
パフォーマンス指標を出力するには、テストコードで Instrumentation#sendStatus
を呼び出して Key-Value ペアのリストを送信します。注意点は次のとおりです。
- 指標には整数または浮動小数点を使用できます。
- 数値以外の値は破棄されます。
- テスト apk は機能テストか指標テストのいずれかになりますが、両方の組み合わせは現在サポートされていません。