マルチプロセス Espresso

アプリの拡張に合わせて、アプリ コンポーネントをいくつか配置すると役立つことがあります。 アプリのメインプロセス以外のプロセスで 実行されることがありますこれらのコンポーネントで デフォルト以外のプロセスでは、マルチプロセス Espresso の機能を使用できます。 このツールは Android 8.0(API レベル 26)以降で利用可能で、次のことができます。 アプリのプロセス間にわたるアプリの UI インタラクションをシームレスにテストする Espresso の同期の保証を維持します。

マルチプロセス Espresso を使用する際は、次のバージョニングとスコープを維持してください 留意してください。

  • アプリの対象 OS は、Android 8.0(API レベル 26)以上にする必要があります。
  • このツールは、 パッケージ化されています。外部プロセスはテストできません。

ツールの使用

マルチプロセス Espresso を使用してアプリ内のプロセスをテストするには、リファレンスを追加します をアプリの build.gradle ファイル内の espresso-remote アーティファクトに追加します。

app/build.gradle

Groovy

dependencies {
    ...
    androidTestImplementation 'androidx.test.espresso:espresso-remote:3.6.1'
}

Kotlin

dependencies {
    ...
    androidTestImplementation('androidx.test.espresso:espresso-remote:3.6.1')
}

また、アプリの androidTest マニフェストに以下を追加する必要があります。

  • プロセスを定義する <instrumentation> 要素。
  • マルチプロセス Espresso を使用することを示す <meta-data> 要素。

次のコード スニペットに、上記要素の追加方法を示します。

src/androidTest/AndroidManifest.xml

<manifest ... package="androidx.test.mytestapp.tests">
  <uses-sdk android:targetSdkVersion="27" android:minSdkVersion="14" />
  <instrumentation
    android:name="androidx.test.runner.AndroidJUnitRunner"
    android:targetPackage="androidx.test.mytestapp"
    android:targetProcesses="*">
    <meta-data
      android:name="remoteMethod"
      android:value="androidx.test.espresso.remote.EspressoRemote#remoteInit" />
  </instrumentation>
</manifest>

前のスニペットでは、テストすることを Android フレームワークに指示しています。 アプリのパッケージ内のすべてのプロセスが対象になります。テストするテストのタイプを 指定する場合は、リスト内でカンマ区切りのリストを targetProcesses 要素を使用します。

<instrumentation
    ...
    android:targetProcesses=
            "androidx.test.mytestapp:myFirstAppProcessToTest,
             androidx.test.mytestapp:mySecondAppProcessToTest" ... />

ツールのアーキテクチャについて

アプリをテストしてデフォルト プロセスを起動するときに、UI を実行する セカンダリ ウィンドウでアクティビティを開始する操作(ボタンの押下など) プロセスですその後、システムは次のステップを実行して、 Espresso を使用したテスト:

  1. Android フレームワークは、アプリのプロンプトに従って新しいプロセスを作成して開始します。 ナビゲーション構造があります。各 Instrumentation プロセス Pod の新しいインスタンスに AndroidJUnitRunner。 この段階では、2 つのインストルメンテーション プロセスは、 あります。
  2. AndroidJUnitRunner インスタンスが Espresso をテスト フレームワークとして登録する。
  3. この 2 つのインスタンスは、 AndroidJUnitRunner handshake を実行して相互に接続を確立する。同じ 時間、 AndroidJUnitRunner Espresso などのすべての登録済みクライアントをそれぞれのクライアントに接続する クライアントが 1 対 1 のダイレクト レスポンスを 通信チャネルを確立します。
  4. AndroidJUnitRunner インスタンスは新しく追加されたインストルメンテーション インスタンスを継続的に探し、テスト 必要に応じて追加の通信チャネルを確立します。

図 1 に、この手順の結果を示します。

図 1. 複数のネットワーク間での通信の確立は、 マルチプロセス Espresso を使用したインストルメンテーション プロセス

参考情報

このトピックに関するその他の情報については、次のリソースをご覧ください。