インストルメンテーション テスト

まず、developer.android.com にあるアプリをテストするをご覧ください。プラットフォーム テストにおけるインストルメンテーション テストは、いくつかの点で使い方が異なります。

インストルメンテーション テストは、am instrument コマンドによって起動される特別なテスト実行環境です。この環境でターゲット アプリケーション プロセスが再起動され、基本アプリケーション コンテキストで初期化されて、アプリケーション プロセス VM 内でインストルメンテーション スレッドが起動されます。テストコードはこのインストルメンテーション スレッドで実行が開始され、Instrumentation インスタンスが付属しています。このインスタンスは、アプリケーション コンテキストへのアクセスを可能にし、テスト中のアプリケーション プロセスを操作する API を提供します。

主な概念

  • アプリケーション パッケージでインストルメンテーションを宣言する必要があります。このとき、アプリケーション パッケージ マニフェストの <manifest> タグ下に <instrumentation> タグをネストします。
  • 技術的にはアプリケーション パッケージ マニフェストに複数の <instrumentation> タグを含めることも可能ですが、一般的な方法ではありません。
  • <instrumentation> には、次のものが含まれている必要があります。
    • android:name 属性: テスト アプリケーションに含まれる Instrumentation のサブクラスの名前です。通常は使用中のテストランナーです(例: android.support.test.runner.AndroidJUnitRunner)。
    • android:targetPackage 属性: テスト対象のアプリケーション パッケージです。定義する必要があります。

ステップの概要

  1. 一般的にフレームワーク サービスに対する目的の密閉型テストは次のとおりです。

    frameworks/base/core/tests/coretests
    frameworks/base/services/tests/servicestests
    

    コンポーネントに新しいインストゥルメンテーション モジュールを追加する場合、以下をご覧ください。

  2. 上記のいずれかの場所にテストを追加する場合、既存の規則に従います。新しいテスト モジュールを設定する場合は、上記のいずれかの場所にある AndroidManifest.xmlAndroid.mk のセットアップに従います。

  3. frameworks/base/core/tests/coretests/ の例をご覧ください。 以下の行により、追加のアプリがインストールされますので、ご注意ください。

    <option name="test-file-name" value="FrameworksCoreTests.apk" />
    <option name="test-file-name" value="BstatsTestApp.apk" />
    
  4. 必ず、@SmallTest@MediumTest@LargeTest のいずれかとしてテストをマークしてください。

  5. テスト モジュールを m でビルドします。例:

    m FrameworksCoreTests
    
  6. テストを実施します。

    m tradefed-all
    tradefed.sh run template/local_min --template:map test=FrameworksCoreTests
    
  7. Tradefed を使用しない場合、テストを手動でインストールして実行します。

    1. 生成された apk をインストールします。
    adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
    
    1. さまざまなオプションを指定してテストを実行します。

      1. apk 内のすべてのテスト

        adb shell am instrument -w com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      2. 特定の Java パッケージ下のすべてのテスト

        adb shell am instrument -w -e package android.animation \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      3. 特定のクラス下のすべてのテスト

        adb shell am instrument -w -e class \
          android.animation.AnimatorSetEventsTest \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      4. 特定のテスト方法

        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 ペアのリストを送信します。注意点は次のとおりです。

  1. 指標には整数または浮動小数点を使用できます。
  2. 数値以外の値は破棄されます。
  3. テスト apk は機能テストか指標テストのいずれかになりますが、両方の組み合わせは現在サポートされていません。