シンプルなビルド構成

新しいテスト モジュールには、モジュール メタデータ、コンパイル時の依存関係、パッケージ化手順をビルドシステムに指示するための構成ファイルが必要です。Android では Soong ビルドシステムを使用してより簡単にテストを構成できるようになりました。

Soong ではブループリント(.bp)ファイルが使用されます。これはビルドするモジュールに関する、JSON 形式に似た単純な宣言的記述です。この形式は、以前のリリースで使用されていた Make ベースのシステムに代わるものです。詳細については、継続的インテグレーション ダッシュボードSoong リファレンス ファイルをご覧ください。

カスタムテストに対応する、または Android 互換性テストスイート(CTS)を使用するには、複雑なテスト構成を使用します。

以下の内容は、ブループリント構成ファイルの例(/platform_testing/tests/example/instrumentation/Android.bp)によるものです。

便宜上、スナップショットがここに含まれています。

android_test {
        name: "HelloWorldTests",
        srcs: ["src/**/*.java"],
        sdk_version: "current",
        static_libs: ["android-support-test"],
        certificate: "platform",
        test_suites: ["device-tests"],
    }
    

最初の android_test 宣言は、これがテストであることを示します。代わりに android_app とすると、ビルド パッケージであることを示します。

設定

次の設定は説明を要します。

    name: "HelloWorldTests",
    

android_test モジュール タイプが指定されている場合、name 設定が(ブロックの先頭に)必要です。この設定がモジュール名になり、生成される APK は同じ名前で接尾辞 .apk が付きます。この場合、生成されるテスト apk の名前は HelloWorldTests.apk です。また、モジュールの make ターゲット名も定義します。これにより、make [options] <HelloWorldTests> を使用してテスト モジュールとすべての依存関係をビルドできます。

    static_libs: ["android-support-test"],
    

static_libs 設定は、指定されたモジュールのコンテンツを現在のモジュールで生成される apk に組み込むようビルドシステムに指示します。つまり、各名前付きモジュールは .jar ファイルを生成します。そのコンテンツはコンパイル時に classpath 参照の解決に使用され、生成される apk に組み込まれます。

この例で、テストに一般的に役立つ可能性のある設定は以下のとおりです。

android-support-test は、Android テスト サポート ライブラリ用に事前にビルドされています。これには、JUnit4 テスト フレームワークに対応した新しいテストランナー AndroidJUnitRunner(現在はサポートが終了した組み込みの InstrumentationTestRunner の後継)が含まれます。詳しくは、Android アプリのテストをご覧ください。

新しいインストゥルメンテーション モジュールを作成する場合、まずテストランナーとして android-support-test ライブラリを使用する必要があります。プラットフォーム ソースツリーには、ub-uiautomatormockito-targeteasymock などの他の有用なテスト フレームワークも含まれています。

    certificate: "platform",
    

certificate 設定は、コア プラットフォームと同じ証明書で apk に署名するようビルドシステムに指示します。これは、署名で保護された権限または API をテストで使用する場合に必要です。プラットフォームの継続的なテストには適していますが、CTS テスト モジュールでは使用しないでください。この例で証明書を設定しているのは説明のためにすぎません。この例のテストコードでテスト apk を特別なプラットフォーム証明書で署名する必要はありません。

システム サーバーの外部に存在するインストゥルメンテーションを作成する場合(通常のアプリ apk と同じようにパッケージ化されている場合)、システム イメージに組み込まれて特権アプリの可能性があることを除けば、インストゥルメンテーションがコンポーネントのアプリ パッケージ(マニフェストに関する以下のセクションを参照)をターゲットにしている可能性があります。この場合、アプリケーションの makefile には独自の certificate 設定があり、インストゥルメンテーション モジュールには同じ設定を保持する必要があります。これは、テスト対象アプリでインストゥルメンテーションをターゲットにするためであり、テスト apk とアプリ apk に同じ証明書で署名する必要があります。

それ以外の場合、この設定は必要ありません。ビルドシステムはビルド バリアントに基づいてデフォルトの組み込み証明書で署名するだけです。通常は dev-keys と呼ばれます。

    test_suites: ["device-tests"],
    

test_suites 設定により、Trade Federation テストハーネスでテストを簡単に検出できるようになります。このテストを共有できるように、CTS などの他のスイートをここに追加できます。

${ANDROID_PRODUCT_OUT}/testcases/HelloWorldTests/HelloWorldTests.apk