まず、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=FrameworksCoreTestsTradefed を使用しない場合、テストを手動でインストールして実行します。
- 生成された 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 は機能テストか指標テストのいずれかになりますが、両方の組み合わせは現在サポートされていません。